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)选项肯定是最简单,最快捷的解决方案.(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |