5

我有一个为我们的生产线创建的脚本,用户在执行之前将一些变量输入到脚本中。问题是变量是 NVARCHAR(9),如果用户输入一个 10 个字符的字符串,最后一个字符被截断(如预期的那样)我想知道的是,如果他们输入一个值,我如何让 SQL 抛出错误太长?这个问题源于用户对输入的过度指法。例子:

Valid input - 
DECLARE @ClientCode NVARCHAR(9)
SET @ClientCode = N'ABCDEFGHI'
SELECT  @ClientCode

Results
ABCDEFGHI

输入无效 -

DECLARE @ClientCode NVARCHAR(9)
SET @ClientCode = 'ABCDDEFGHI'
SELECT @ClientCode

Results
ABCDDEFGH

我希望的是一个会让 SSMS 引发错误的设置。我希望避免的是 -

DECLARE @ClientCode NVARCHAR(50)
...

IF LEN(@ClientCode) > 9
RAISERROR('Too long dummy.',16,1)


谢谢你的帮助

4

2 回答 2

1

请参阅SQL Server 在存储过程中静默截断 varchar - SQL Server 无法设置为在存储过程中自动引发插入截断错误,因此您必须自己执行检查。您可以在存储过程(您列为“希望避免”的代码)中执行此操作,也可以在客户端应用程序中预先验证。

于 2012-12-14T16:11:35.727 回答
0

我也一直在查看 Scott Chapman 在他的回答中引用的问题,但是,我发现 igorp 的回答中途很有趣,我不得不稍微修改一下以修复 SQL,但它可以工作:

declare @p1 varchar(max), @p2 varchar(max)
select @p1 = 'abcd'
declare @p1Int varchar(2), @p2Int varchar(3)
declare @test table (p1 varchar(2), p2 varchar(3))
insert into @test (p1,p2) values (@p1, @p2)
select @p1Int=p1, @p2Int=p2 from @test
于 2012-12-14T16:19:08.500 回答