这是脚本:
DECLARE @Login VARCHAR(10)
SET @Login = N'sysprogress'
PRINT @Login
此时@Login有sysprogres(最后缺少1个字符)。
是否有一个SQL选项会在发生这种情况时引发错误而不是静默截断数据?
答案 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()
。