2010-03-16 15 views
6

que tienen una columna nvarchar(50) en una tabla de SQL Server 2000 se define de la siguiente manera:¿Por qué no funciona este SQL CAST?

TaskID nvarchar(50) NULL 

necesito para llenar esta columna con el GUID de SQL aleatoria usando la función NEWID() (soy incapaz de cambiar el tipo de columna a uniqueidentifier) .

yo probamos este:

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

pero me dio el siguiente error:

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

También probé:

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

pero luego dio este mensaje:

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

No entiendo por qué esto no funciona, pero esto hace:

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

También probé CONVERT(nvarchar, NEWID()) y CONVERT(nvarchar(50), NEWID()) pero tengo los mismos errores.

Actualización:

Ok, mi vista se esta volviendo, el tamaño de la columna sobre la mesa es nvarchar(32) no 50. profundas disculpas para el timewasting y gracias por todas las respuestas.

+0

¿Tiene usted y dispara en esta tabla? Es posible que reciba mensajes de error del desencadenador. sp_helpTrigger 'TaskData' –

+0

@GMastros - no, el problema era PEBKAC/PICNIC más conocido como código 'ID 10T'. – Kev

Respuesta

11

Esta prueba funciona bien para mí ... Sólo puedo sugerir que tal vez su TaskId no es un nvarchar (50), como se dice? Pruebe un sp_columns sólo para comprobar ...

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

Por favor, intente el siguiente reparto:

guión
CAST(NEWID() AS varchar(255)) 
0

utilización tipo de datos varchar, nvarchar necesita de dos plazas

14

Cuando no se especifica el tamaño de su varchar/nvarchar durante un yeso o convertir, toma por defecto 30 caracteres. Necesitas 36 caracteres para convertir un guid en una cadena. Es por eso que obtienes el error.

Cualquiera de estos funcionará:

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

Esta me parece ser la respuesta más precisa aquí. –

Cuestiones relacionadas