5

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;

ありがとう

4

1 に答える 1

9

char(4)変数は、3つの末尾のスペースで埋められます。

これらはパターンで重要でありLIKE、3つのスペースで終わる値にのみ一致します。varchar(4)代わりに使用してください。

于 2012-11-05T13:37:18.897 に答える