当我在将数据从一个表复制到另一个表时运行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()**有问题,如果我把它取出来,用一些字符串替换它,它就可以工作了。
我很感激你的帮助。先谢谢你了。
5条答案
按热度按时间2hh7jdfx1#
guid需要36个字符(因为破折号)。您只提供了32个字符的列。不够,因此出现错误。
8oomwypt2#
当我试图在GUID上执行简单的字符串连接时,我收到了这个错误。显然,
VARCHAR
不够大。我只好岔开主题:
SET @foo = 'Old GUID: {' + CONVERT(VARCHAR, @guid) + '}';
个至:
SET @foo = 'Old GUID: {' + CONVERT(NVARCHAR(36), @guid) + '}';
...一切都很好。非常感谢之前对这一点的回答!
brvekthn3#
你可以试试这个。我用过了。
请在强制转换/转换值时指定VARCHAR的长度。对于uniqueidentifier,请按如下所示使用VARCHAR(36):
如果在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