シナリオ: ストアドプロシージャにn個引数を渡す必要があります。引数の1つはタイプvarchar(x)
です。そのvarchar引数は、他にもいくつかのvarchar変数から構成する必要があります。この問題はSQL Server 2005を使用しますが、この動作はSQL Serverのすべてのバージョンに適用されます。T-SQLストアドプロシージャに引数として連結した文字列を渡すことはできません
セットアップ:Incorrect syntax near '+'
:
DECLARE @MyString varchar(500), @MyBar varchar(10), @MyFoo varchar(10)
SELECT @MyBar= 'baz '
SELECT @MyFoo= 'bat '
-- try calling this stored procedure!
EXEC DoSomeWork @MsgID, 'Hello ' + @MyBar + '" world! "' + @MyFoo + '".'
これは、SQL Serverで例外を生成します。通常、データ型が間違っていると考えられます(つまり、変数の型は異なりますが、異なるエラーメッセージが生成されます)。は、T-SQLの引数としてvarchar型の連結を扱うことができないということですなぜ:
SELECT @MyString= 'Hello ' + @MyBar + '" world! "' + @MyFoo + '".';
EXEC DoSomeWork @ID, @MyString
質問:ここ
は、エラーなしでコンパイル正しい実装ですか? varcharとして適切に宣言されているので、型が分かっています。
あなたはあなたがあなたの一番下のクエリ でやっているように、それは、少なくとも機能のための非決定論的(であるので、それはあるかもしれないのparamにすべてのものを配置する必要があり、このexec SomeProc getdate()
いずれかのような何かを行うことはできません
このコメントに掲載されているウェブサイトはもう上がっていません。 – Buggieboy
ありがとうございます。 MSDNを使用するためのリンクを更新しました。 – SurroundedByFish