加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 有没有办法防止SQL Server以静默方式截断局部变量

发布时间:2020-12-12 07:06:54 所属栏目:MsSql教程 来源:网络整理
导读:我最近在将应用程序移植到SQL Server时遇到了问题.事实证明,这个问题是由于传递给它的数据声明的存储过程参数太短引起的:参数声明为VARCHAR(100),但在一种情况下传递了超过100个字符的数据.让我感到惊讶的是,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)选项肯定是最简单,最快捷的解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读