like パラメータを変数に設定し、その変数がワイルド カードを受け入れられるようにしようとしています (mssql 2005)。'%' に設定されたパラメーターを使用すると、部分的なサブセットのみが返されますが、'%' を使用するようにクエリをハードコーディングすると、完全なセットが返されます。変数が文字列と異なる動作をするのはなぜですか?
DECLARE @wareno char(4);
SET @wareno = '%';
select @wareno as a, * from waredesc where wareno like @wareno;
対
DECLARE @wareno char(4);
SET @wareno = '%';
select @wareno as a, * from waredesc where wareno like '%';
完全なシナリオはフラグに基づいて切り替えていますが、上記のコードで再現可能です
DECLARE @wareno char(4);
DECLARE @delprods bit;
/**
SET THESE PARAMETERS
**/
SET @wareno = '1';
SET @delprods = 'true'; /** if true all the warehouses should also be emptied for safety - products are held at a company level!**/
IF @delprods = 1
BEGIN
SET @wareno = '%';
END
select @wareno as a, * from waredesc where wareno like @wareno;
ありがとう