我最近在将应用程序移植到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'.
局部变量也表现出相同的行为:
1> declare @s varchar(5) = '123456789'; 2> print @s; 3> go 12345
是否有一个选项可以在这种情况下启用sql Server报告错误(或至少是警告)?或者我应该只将所有局部变量和存储过程参数声明为VARCHAR(MAX)或NVARCHAR(MAX)?