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

yrefmtwq  于 2022-10-31  发布在  SQL Server
关注(0)|答案(5)|浏览(339)

当我在将数据从一个表复制到另一个表时运行sql查询时,出现以下错误,
消息8170,级别16,状态2,第2行结果空间不足,无法将uniqueidentifier值转换为char。
我sql查询是,

INSERT INTO dbo.cust_info (
uid,
first_name,
last_name
)
SELECT
NEWID(),
first_name,
last_name
FROM dbo.tmp_cust_info

我创建表脚本是,

CREATE TABLE [dbo].[cust_info](
    [uid] [varchar](32) NOT NULL,
    [first_name] [varchar](100) NULL,
    [last_name] [varchar](100) NULL)

CREATE TABLE [dbo].[tmp_cust_info](
    [first_name] [varchar](100) NULL,
    [last_name] [varchar](100) NULL)

我确信**NEWID()**有问题,如果我把它取出来,用一些字符串替换它,它就可以工作了。
我很感激你的帮助。先谢谢你了。

2hh7jdfx

2hh7jdfx1#

guid需要36个字符(因为破折号)。您只提供了32个字符的列。不够,因此出现错误。

8oomwypt

8oomwypt2#

当我试图在GUID上执行简单的字符串连接时,我收到了这个错误。显然,VARCHAR不够大。
我只好岔开主题:
SET @foo = 'Old GUID: {' + CONVERT(VARCHAR, @guid) + '}';
至:
SET @foo = 'Old GUID: {' + CONVERT(NVARCHAR(36), @guid) + '}';
...一切都很好。非常感谢之前对这一点的回答!

brvekthn

brvekthn3#

你可以试试这个。我用过了。
请在强制转换/转换值时指定VARCHAR的长度。对于uniqueidentifier,请按如下所示使用VARCHAR(36):

SELECT Convert (varchar(36),NEWID()) AS NEWID

如果在CAST/CONVERT期间不指定长度,则VARCHAR数据类型的默认长度为30。
作者:克里希纳库马尔S
参考:https://social.msdn.microsoft.com/Forums/en-US/fb24a153-f468-4e18-afb8-60ce90b55234/insufficient-result-space-to-convert-uniqueidentifier-value-to-char?forum=transactsql

相关问题