Tsql 为什么赢了';这不是SQL CAST工作吗?

Tsql 为什么赢了';这不是SQL CAST工作吗?,tsql,sql-server,sql-server-2000,Tsql,Sql Server,Sql Server 2000,我在SQL Server 2000表中有一个nvarchar(50)列,定义如下: TaskID nvarchar(50) NULL 我需要使用NEWID()函数使用随机SQL GUID填充此列(我无法将列类型更改为uniqueidentifier) 我试过这个: UPDATE TaskData SET TaskID = CAST(NEWID() AS nvarchar) 但我得到了以下错误: Msg 8115,16级,状态2,第1行 算术溢出错误转换 数据类型nvarchar的表达式 我还

我在SQL Server 2000表中有一个
nvarchar(50)
列,定义如下:

TaskID nvarchar(50) NULL
我需要使用
NEWID()
函数使用随机SQL GUID填充此列(我无法将列类型更改为
uniqueidentifier

我试过这个:

UPDATE TaskData SET TaskID = CAST(NEWID() AS nvarchar)
但我得到了以下错误:

Msg 8115,16级,状态2,第1行 算术溢出错误转换 数据类型nvarchar的表达式

我还尝试:

UPDATE TaskData SET TaskID = CAST(NEWID() AS nvarchar(50))
但后来出现了这个错误:

Msg 8152,第16级,第6状态,第1行 字符串或二进制数据将是 截断的

我不明白为什么这不起作用,但这确实起作用了:

DECLARE @TaskID nvarchar(50)
SET @TaskID = CAST(NEW() AS nvarchar(50))
我还尝试了
CONVERT(nvarchar,NEWID())
CONVERT(nvarchar(50),NEWID())
,但得到了相同的错误

更新:


好的,我的视力正在恢复,表上的列大小是
nvarchar(32)
不是50。对浪费时间深表歉意,并感谢所有的回答

请尝试以下类型:

CAST(NEWID() AS varchar(255))

这个测试脚本对我来说很好。。。我只能说,也许你的TaskId不是你说的NVARCHAR(50)?尝试sp_列以检查

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

使用varchar数据类型,nvarchar需要两倍大小

当您在强制转换或转换期间未指定varchar/nvarchar的大小时,默认为30个字符。将guid转换为字符串需要36个字符。这就是为什么会出现错误

这两种方法中的任何一种都会起作用:

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

这张桌子上有和触发器吗?您可能从触发器收到错误消息。sp_helpTrigger'TaskData'@GMastros-不,问题是PEBKAC/野餐,通常称为代码“ID10T”。在我看来,这是这里最准确的答案。