2010-03-16 30 views
6

Aşağıdaki gibi tanımlanan bir SQL Server 2000 tablosunda bir nvarchar(50) sütunu var:Bu SQL CAST neden çalışmıyor?

TaskID nvarchar(50) NULL 

Bu sütunu NEWID() işlevini kullanarak rastgele SQL GUID'leri ile doldurmam gerekiyor (sütun türünü uniqueidentifier olarak değiştiremiyorum).

:

UPDATE TaskData SET TaskID = CAST(NEWID() AS nvarchar) 

fakat şu hatayı aldım:

Msg 8115, Level 16, State 2, Line 1 Arithmetic overflow error converting expression to data type nvarchar.

Ayrıca denedim:

UPDATE TaskData SET TaskID = CAST(NEWID() AS nvarchar(50)) 

ancak bu hatayı aldım:

Msg 8152, Level 16, State 6, Line 1 String or binary data would be truncated.

Bunun neden işe yaramadığını anlamıyorum ama şu anlama geliyor:

DECLARE @TaskID nvarchar(50) 
SET @TaskID = CAST(NEW() AS nvarchar(50)) 

Aynı zamanda CONVERT(nvarchar, NEWID()) ve CONVERT(nvarchar(50), NEWID()) denedim ama aynı hataları aldım.

Güncellenme:

Görüntüm devam ediyor, tablodaki sütun büyüklüğü 50 değil nvarchar(32). Zamanlama için en derin özürler ve tüm cevaplar için teşekkürler.

+0

var ve bu masada tetikler mi? Tetikleyiciden hata mesajları alıyor olabilirsiniz. sp_helpTrigger 'TaskData' –

+0

@GMastros - hayır, sorun daha çok "ID 10T" kodu olarak bilinen PEBKAC/PICNIC idi. – Kev

cevap

11

Bu test komut benim için çalışıyor ... Ben sadece dediğin gibi belki GörevKimliği bir DEPARTMENTNAME (50) olmadığını önerebilirsiniz? Bir sadece kontrol etmek sp_columns ...

CREATE Table #TaskData (TaskId NVARCHAR(50)) 
INSERT INTO #TaskData (TaskId) SELECT CONVERT(NVARCHAR(50), NEWID()) 
UPDATE #TaskData SET TaskId = CONVERT(NVARCHAR(50), NEWID()) 
DROP TABLE #TaskData 
3

aşağıdaki döküm deneyin:

CAST(NEWID() AS varchar(255)) 
0

kullanım varchar veri türü deneyin, nvarchar varsayılan olarak karşı, çift boyutu

14

bir döküm sırasında varchar/nvarchar boyutu belirtmek veya dönüştürmeyin ihtiyacı 30 karakter. Bir yönlendirmeyi bir dizeye dönüştürmek için 36 karaktere ihtiyacınız vardır. Bu yüzden hatayı aldınız.

Bunların Ya çalışacaktır: Eğer

Select Cast(NewId() as nvarchar(36)), CONVERT(nvarchar(36), NEWID()) 
+2

Bu bana en doğru cevabı vermiş gibi görünüyor. –