Sql server T-SQL结果空间不足,无法将uniqueidentifier值转换为char

Sql server T-SQL结果空间不足,无法将uniqueidentifier值转换为char,sql-server,tsql,type-conversion,uniqueidentifier,Sql Server,Tsql,Type Conversion,Uniqueidentifier,如何修复此错误 代码 结果 Msg 8170,16级,状态2,第2行 结果空间不足,无法将uniqueidentifier值转换为字符 您需要为varchar变量指定字符串长度,否则默认长度将为30(长度不足以包含您的值),如Microsoft文档所示: varchar[(n | max)]可变长度、非Unicode字符串数据。n定义字符串长度,可以是1到8000之间的值。 如果在使用强制转换和转换函数时未指定n,则默认长度为30 因此,以下应该可以解决您的问题: declare @guid u

如何修复此错误

代码 结果 Msg 8170,16级,状态2,第2行
结果空间不足,无法将uniqueidentifier值转换为字符


您需要为
varchar
变量指定字符串长度,否则默认长度将为30(长度不足以包含您的值),如Microsoft文档所示:

varchar[(n | max)]可变长度、非Unicode字符串数据。n定义字符串长度,可以是1到8000之间的值。

如果在使用强制转换和转换函数时未指定n,则默认长度为30

因此,以下应该可以解决您的问题:

declare @guid uniqueidentifier = '4164980A-EFD0-4C60-A18A-253465E00E9C'
print 'GUID ='+cast(@guid as varchar(36))

VARCHAR
指定长度,否则它将默认为1。Aaron Bertrand读取的可能重复。整个博客“改掉坏习惯”非常值得阅读;-)进一步阅读引用的文档:“当在使用CAST和CONVERT函数时未指定n时,默认长度为30。”对于GUID来说,仍然不够长,这仍然是一种糟糕的做法。对不起,是的,我引用了文档中错误的部分-我遗漏了这里的OP使用的是
CAST
。“我会编辑的,谢谢。”哈波从我嘴里说出了这些话。但我认为OP正在考虑使用
VARCHAR
,而不为T-SQL变量指定长度(例如:
declare@stringVar VARCHAR
)。在这种情况下,它肯定只有1个字符的长度。
declare @guid uniqueidentifier = '4164980A-EFD0-4C60-A18A-253465E00E9C'
print 'GUID ='+cast(@guid as varchar(36))