当VARCHAR变量对于指定的值太小时,如何使SQL抛出错误?

时间:2016-08-15 13:41:07

标签: sql-server tsql

这是脚本:

DECLARE @Login VARCHAR(10)

SET @Login = N'sysprogress'

PRINT @Login

此时@Login有sysprogres(最后缺少1个字符)。

是否有一个SQL选项会在发生这种情况时引发错误而不是静默截断数据?

4 个答案:

答案 0 :(得分:0)

我知道没有可以设置的服务器级选项来避免这种情况。它可以通过编程方式处理。

您可以使用LEN()检查字符串的长度,如果它长于您想要的长度,则可以使用RAISERROR()引发错误。

Here是一些额外信息。

答案 1 :(得分:0)

我会使用测试变量并检查它,然后设置变量或引发错误。

DECLARE @Login VARCHAR(10)
DECLARE @Test VARCHAR(max)

SET @Test = N'sysprogress'

IF LEN(@Test) > 10 
BEGIN RAISERROR('Longer than 10',16,1) END
ELSE set @Login =  @Test

select @Login

答案 2 :(得分:0)

您必须适当地定义长度,没有选项来检查值是否超过长度..

如果你不确定长度,那么有一种冗长的方法是从中声明表和副本。

declare   @table table
(
loginn varchar(10)
)

insert into @table
select 'sysprogress'--this fails
  

Msg 8152,Level 16,State 14,Line 7   字符串或二进制数据将被截断。   声明已经终止。

答案 3 :(得分:0)

  • 对于插入更新,请使用constraint或定义您想要的Length

  • assigenment 使用Len()