5

ユーザーが実行前にスクリプトにいくつかの変数を入力する生産ライン用に作成したスクリプトがあります。問題は、変数が NVARCHAR(9) であり、ユーザーが 10 文字の文字列を入力すると、(予想どおり) 最後の文字が切り捨てられることです。長すぎます?この問題は、ユーザーがファット フィンガーで入力することに起因します。例:

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 をサイレントに切り捨てるを参照してください。これは、ストアド プロシージャ (「回避したい」と記載したコード) で行うか、クライアント アプリケーションで事前に検証することができます。

于 2012-12-14T16:11:35.727 に答える
0

スコット・チャップマンが彼の回答で参照している質問も見てきましたが、途中で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 に答える