0

文字列変数が '' でない場合に WHERE 句を含め、ID がリスト内のどこに存在するかを確認するクエリを SQL で作成するにはどうすればよいですか?
以下はうまくいかないようです。

DECLARE @var varchar(20)
DECLARE @clause varchar(20)
DECLARE @sql varchar(20)

SET @var= '1,2,3'
IF @var <> ''
SET @clause=' WHERE ID IN ('+ @var + ')'

SET @sql='SELECT  [ID]
  ,[SOURCE]
  ,[LAST_KEY]
FROM [oms].[dbo].[MIGRATION]' 

EXEC (@sql + @clause)

エラー メッセージ: メッセージ 156、レベル 15、状態 1、行 2 キーワード 'WHERE' 付近の構文が正しくありません。

4

2 に答える 2

2

@sql 変数の長さを MAX のように増やします

DECLARE @sql varchar(MAX)

その変数にクエリ全体を格納するには不十分な 20 の長さを定義しました。@clause 変数も削除し、以下のようにコードを変更します。クエリ全体を印刷してprint @sql、何が問題なのかを確認することもできます。

DECLARE @var varchar(500)
DECLARE @sql varchar(MAX)

SET @var= '1,2,3'

SET @sql = 'SELECT  [ID], 
                    [SOURCE], 
                    [LAST_KEY] 
            FROM    [oms].[dbo].[MIGRATION]' 

IF @var IS NOT NULL AND @var <> ''
BEGIN
    SET @sql = @sql + ' WHERE ID IN ('+ @var + ')'
END

EXEC (@sql)
于 2013-11-08T04:20:30.923 に答える