0

私のクエリはここに投稿するよりもはるかに複雑ですが、sp_executeSQL の使用中に変数を使用することができません...回避策はありますか?

declare @system_status varchar(30)
select @system_status = '12,20'

declare @sql nvarchar(4000)

select @sql = 'SELECT [system_status] 
FROM VW_Document_Main 
WHERE 1=1 ' 

IF @system_status IS NOT NULL AND @system_status NOT IN ('-1','0') 
BEGIN 
SELECT @sql = @sql + 'and (',''+@system_Status+'',') LIKE ''%,''+system_Status+'',%''' 

文字列を SQL の最後に連結し、最終的には次を使用してクエリを実行しようとしていますsp_executesql

ただし、連結に関してエラー メッセージが表示されます。

変数に値を代入する SELECT ステートメントは、データ取得操作と組み合わせてはなりません。

それを修正/回避する方法についてのアイデアはありますか??

....それは恥ずかしいことですが、SELECTの代わりにSETを使用するとうまくいきました...

4

3 に答える 3

1

SELECT のコンマに問題があります。あなたが何をしようとしているのかわからないので、私がそれを機能させた2つの可能な方法を次に示します。

1) カンマを削除します。

SELECT @sql = @sql + 'and ('''+@system_Status+''') LIKE ''%,''+system_Status+'',%'''

これにより、クエリは次のようになります。

SELECT [system_status] 
FROM VW_Document_Main 
WHERE 1=1 and ('12,20') LIKE '%,'+system_Status+',%'

2) コンマが文字列の外に出ないように、さらに引用符を追加します。

SELECT @sql = @sql + 'and ('',''+@system_Status+'','') LIKE ''%,''+system_Status+'',%'''

これにより、出力は次のようになります。

SELECT [system_status] 
FROM VW_Document_Main 
WHERE 1=1 and (','+@system_Status+',') LIKE '%,'+system_Status+',%'
于 2013-03-20T20:01:09.770 に答える
0

動的SQL構造にエラーがあります。最後の行に必要なものは次のようになります。


SELECT @sql = @sql + 
              'and ('+','+@system_Status+',) LIKE ''%,'+
              @system_Status+',%''' 

于 2013-03-20T19:57:32.033 に答える
0

いくつかの引用符がありません:

declare @system_status varchar(30)
select @system_status = '12,20'

declare @sql nvarchar(4000)

select @sql = 'SELECT [system_status] 
FROM VW_Document_Main 
WHERE 1=1 ' 

IF @system_status IS NOT NULL AND @system_status NOT IN ('-1','0') 
BEGIN 
SELECT @sql = @sql + 'and ('','+@system_Status+','') LIKE ''%,''+system_Status+'',%'''
END
SELECT @sql
于 2013-03-20T19:58:26.050 に答える