sql-server – 有没有办法防止SQL Server以静默方式截断局部变量和存储过程参数中的数据?

前端之家收集整理的这篇文章主要介绍了sql-server – 有没有办法防止SQL Server以静默方式截断局部变量和存储过程参数中的数据?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近在将应用程序移植到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)?

解决方法

sql Server没有这样的选项.您将不得不手动检查存储过程中的字符串长度,并以某种方式处理较长的字符串或使用nvarchar(max)选项.如果磁盘空间不是问题,那么nvarchar(max)选项肯定是最简单,最快捷的解决方案.

猜你在找的MsSQL相关文章