2016-02-03 2 views
0

У меня есть таблица клиентов в SQL Server 2012, столбец «status» имеет тип varchar (1).Ошибка «String или двоичные данные будут обрезаны», когда значение имеет тот же размер, что и размер столбца.

Это утверждение дает «Строка или двоичные данные будут усечены» ошибка

exec sp_executesql N'update customer set status=''@stat'' 
where [email protected]',N'@stat varchar(1),@custID bigint',@stat='B',@custID=940 

Я не знаю, почему, потому что я передаю «B» как один символ. Я получаю ту же ошибку, если @stat=''

Однако это утверждение работает нормально:

exec sp_executesql N'update customer set status=''B'' 
where [email protected]',N'@custID bigint',@custID=940 

Кажется, есть тонкий вопрос, я пропускаю. Есть идеи?

ответ

5

Вы ошибочно пытаетесь установить status на литальную строку '@stat', а не на значение переменной @stat. Строка '@stat' имеет пять символов и будет усечена при вставке в VARCHAR(1). Попытка:

exec sp_executesql N'update customer set [email protected] 
where [email protected]',N'@stat varchar(1),@custID bigint',@stat='B',@custID=940