Недавно я столкнулся с проблемой при переносе приложения на SQL Server.Оказалось, что эта проблема была вызвана тем, что параметр хранимой процедуры был объявлен слишком коротким для передаваемых ему данных: параметр был объявлен как VARCHAR(100)
, но в одном случае передавалось более 100 символов данных.Что меня удивило, так это то, что SQL Server не сообщал об ошибках или предупреждениях - он просто молча урезал данные до 100 символов.
Следующий сеанс SQLCMD демонстрирует это:
1> create procedure WhereHasMyDataGone (@data varchar(5)) as
2> begin
3> print 'Your data is ''' + @data + '''.';
4> end;
5> go
1> exec WhereHasMyDataGone '123456789';
2> go
Your data is '12345'.
LocalПеременные также проявляют то же поведение:
1> declare @s varchar(5) = '123456789';
2> print @s;
3> go
12345
Можно ли включить параметр, позволяющий в таких ситуациях сообщать об ошибках (или хотя бы предупреждениях) SQL Server?Или я должен просто объявить все локальные переменные и параметры хранимой процедуры как VARCHAR(MAX)
или NVARCHAR(MAX)
?