2010-03-16 4 views
6

J'ai une nvarchar(50) colonne dans un SQL Server 2000 table définie comme suit:Pourquoi ce SQL CAST ne fonctionnera-t-il pas?

TaskID nvarchar(50) NULL 

J'ai besoin pour remplir cette colonne avec l'aide de la fonction NEWID() de GUID SQL aléatoire (je ne peux pas changer le type de colonne à uniqueidentifier) .

J'ai essayé ceci:

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

mais j'obtenu l'erreur suivante:

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

J'ai aussi essayé:

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

mais a obtenu cette erreur:

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

Je ne comprends pas pourquoi cela ne fonctionne pas, mais cela ne:

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

J'ai aussi essayé CONVERT(nvarchar, NEWID()) et CONVERT(nvarchar(50), NEWID()) mais ai eu les mêmes erreurs.

Mise à jour:

Ok, ma vue va, la taille de la colonne sur la table est nvarchar(32) pas 50. excuses Deepest pour le timewasting et merci pour toutes les réponses.

+0

Avez-vous et des déclencheurs sur cette table? Vous pouvez recevoir des messages d'erreur à partir du déclencheur. sp_helpTrigger 'TaskData' –

+0

@GMastros - non, le problème était PEBKAC/PICNIC plus communément connu sous le nom de code 'ID 10T'. – Kev

Répondre

11

Ce script de test fonctionne bien pour moi ... Je ne peux que suggérer que peut-être votre TaskId n'est pas un NVARCHAR (50) comme vous dites? Essayez un sp_columns juste pour vérifier ...

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

S'il vous plaît essayer le casting suivant:

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

utilisation type de données varchar, nvarchar a besoin de taille double

14

Lorsque vous ne spécifiez pas la taille de votre varchar/nvarchar lors d'un casting ou de conversion, la valeur par défaut 30 caractères Vous avez besoin de 36 caractères pour convertir un guid en une chaîne. C'est pourquoi vous obtenez l'erreur.

Chacune de ces fonctionnera:

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

Cela me semble être la réponse la plus précise ici. –

Questions connexes