我在SQL Server 2000表中有一个nvarchar(50)
列,定义如下:
TaskID nvarchar(50) NULL
我需要使用NEWID()
函数使用随机SQL GUID填充此列(我无法将列类型更改为uniqueidentifier
)。
我试过了:
UPDATE TaskData SET TaskID = CAST(NEWID() AS nvarchar)
但我收到以下错误:
Msg 8115,Level 16,State 2,Line 1 算术溢出错误转换 表达式数据类型为nvarchar。
我也尝试过:
UPDATE TaskData SET TaskID = CAST(NEWID() AS nvarchar(50))
但后来出现了这个错误:
Msg 8152,Level 16,State 6,Line 1 字符串或二进制数据 截断。
我不明白为什么这不起作用,但确实如此:
DECLARE @TaskID nvarchar(50)
SET @TaskID = CAST(NEW() AS nvarchar(50))
我也尝试了CONVERT(nvarchar, NEWID())
和CONVERT(nvarchar(50), NEWID())
,但也遇到了同样的错误。
更新
好的,我的视力正在上升,桌子上的柱子大小是nvarchar(32)
而不是50岁。对于浪费时间而言,最深切的道歉并感谢所有答案。
答案 0 :(得分:15)
如果在转换或转换期间未指定varchar / nvarchar的大小,则默认为30个字符。你需要36个字符才能将guid转换为字符串。这就是你得到错误的原因。
其中任何一个都可行:
Select Cast(NewId() as nvarchar(36)), CONVERT(nvarchar(36), NEWID())
答案 1 :(得分:13)
这个测试脚本对我来说很好......我只能建议你的TaskId不像你说的那样是NVARCHAR(50)吗?尝试使用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
答案 2 :(得分:3)
请尝试以下演员:
CAST(NEWID() AS varchar(255))
答案 3 :(得分:0)
使用varchar数据类型,nvarchar需要双倍大小