0

私は SQL に非常に慣れていないので、私の質問が些細なものであるか、または私の仕事をしていないように見える場合は、最初に謝罪させてください。私はこれらの概念の多くを把握する方法を学ぼうとしています.

とにかく、私は最終的に多くのパラメーターを取る複雑なクエリを書いています。これらのパラメーターには、カンマ区切りの文字列を使用して複数の変数を許可します。(以前にこの問題を解決しましたが、SP_ExecuteSQL.

そうは言っても、これがクエリの骨子です。

DECLARE @system_status varchar(30)
SELECT @system_status = '12,14'

DECLARE @sql nvarchar(4000)


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

IF @System_Status =  '-1'      
      Begin      
            SELECT @sql = @sql + 'and system_status <> 20'      
      End      
ELSE IF @system_status IS NOT NULL AND @system_status NOT IN ('-1','0')      
      Begin     
            SELECT @sql = @sql + 'and ' + @system_Status + ' LIKE ''%,'' + system_Status + '',%'''

sp_executesql ステートメントにビルドしない場合でも、使用可能なクエリを作成することはできますが、このクエリについてビルドするので、これらの手順を実行する必要があります...非生成を生成する理由についての考えブールエラー?

編集:それが正しい方向へのステップであるかどうかはわかりませんが、最終的な SELECT ステートメントを読み直した後:

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

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

エラーが次のように表示されることに注意してください

4

1 に答える 1

0

You're plugging in your literal @system_status value '12, 14' into the final SQL so it looks like this

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

Which will fail because you don't have 12,14 in quotes. So you'll have to modify the line

SELECT @system_status = '12,14'

to be

SELECT @system_status = '''12,14'''

Alternatively, since you said you're running this through sp_executeSql you should modify your last select to

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

And change your execute SQL proc to

sp_executesql @sql, N'@system_status varchar(30)', @system_status
于 2013-03-20T15:45:28.960 に答える