当值与列大小相同时,"字符串或二进制数据将被截断"错误

Ton*_*ich 0 sql t-sql sql-server

我在SQL Server 2012中有一个customer表,其'status'列的类型为varchar(1).

此语句给出'字符串或二进制数据将被截断'错误

exec sp_executesql N'update customer set status=''@stat'' 
where custID=@custID',N'@stat varchar(1),@custID bigint',@stat='B',@custID=940 
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,因为我把'B'作为单个字符传递.如果我得到同样的错误@stat=''

但是这句话运行正常:

 exec sp_executesql N'update customer set status=''B'' 
where custid=@custID',N'@custID bigint',@custID=940
Run Code Online (Sandbox Code Playgroud)

似乎有一个我遗漏的微妙问题.有任何想法吗?

Mat*_*son 6

您错误地尝试设置status为文字字符串'@stat',而不是变量的值@stat.该字符串'@stat'有五个字符,插入时会被截断VARCHAR(1).尝试:

exec sp_executesql N'update customer set status=@stat 
where custID=@custID',N'@stat varchar(1),@custID bigint',@stat='B',@custID=940 
Run Code Online (Sandbox Code Playgroud)