Sql Server-结果空间不足,无法将uniqueidentifier值转换为字符
当我在将数据从一个表复制到另一个表时运行sql查询时,出现以下错误: Msg 8170,16级,状态2,第2行 结果空间不足,无法转换 字符的唯一标识符值 我的sql查询是Sql Server-结果空间不足,无法将uniqueidentifier值转换为字符,sql,sql-server,newid,Sql,Sql Server,Newid,当我在将数据从一个表复制到另一个表时运行sql查询时,出现以下错误: Msg 8170,16级,状态2,第2行 结果空间不足,无法转换 字符的唯一标识符值 我的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](
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()存在一些问题,如果我取出它并用它正在工作的字符串替换它
谢谢你的帮助。提前感谢。guid需要36个字符(因为有破折号)。您只提供一个32个字符的列。不够,因此会出现错误。您需要使用三种备选方案之一 1,一个uniqueidentifier列,在内部以16字节的形式存储。当您从该列中选择时,它将使用8-4-4-4-12格式自动呈现以供显示
CREATE TABLE [dbo].[cust_info](
[uid] uniqueidentifier NOT NULL,
[first_name] [varchar](100) NULL,
[last_name] [varchar](100) NULL)
2、不推荐将字段更改为char(36),以使其符合格式,包括破折号
CREATE TABLE [dbo].[cust_info](
[uid] char(36) NOT NULL,
[first_name] [varchar](100) NULL,
[last_name] [varchar](100) NULL)
3、不建议使用将其存储在不带破折号的位置,仅存储32个字符的组件
INSERT INTO dbo.cust_info (
uid,
first_name,
last_name
)
SELECT
replace(NEWID(),'-',''),
first_name,
last_name
FROM dbo.tmp_cust_info
从varchar(32)->varchar(36)增加uid列的长度 因为guid需要36个字符 Guid.NewGuid().ToString()->36个字符
输出:12345678-1234-1234-1234-1234-123456789abc我在尝试对GUID执行简单字符串连接时收到此错误。显然,
VARCHAR
不够大
我必须改变:
SET@foo='旧GUID:{'+CONVERT(VARCHAR,@GUID)+'}'代码>
致:
SET@foo='旧GUID:{'+CONVERT(NVARCHAR(36),@GUID)+'}'代码>
…一切都很好。非常感谢之前的回答 顺便说一句,您应该使用uniqueidentifier
列类型来存储guid,而不是字符(36)
(不需要var,因为它不是变量,是吗?)uniqueidentifier
只需要16个字节的存储空间,而guid的字符表示需要36个字节。简单而直接的答案。