1

以下のシナリオがあります。

----------------
ID    |    Type
----------------
1     |    AB
2     |    CD
3     |    EF

さて、ストアド プロシージャでこのクエリに必要なクエリは次のとおりです。

SELECT * FROM Table_Name WHERE TYPE IN ('AB','CD','EF')

以下の手順を書きました。

CREATE PROCEDURE dbo.usp_get_all
  @Type    VARCHAR(200)
AS
BEGIN
  SELECT * FROM Table_Name WHERE TYPE IN (@Type)
END

このクエリは、次の方法で呼び出している場合にのみ正常に機能します。

EXEC usp_get_all 'AB'

現在、以下のような状況が発生している可能性があります。

EXEC usp_get_all '''AB'',''CD'',''EF'''

私の質問:

コンマ区切りの入力パラメーターを分割する関数を使用したくありません。入力パラメーターを使用してのみ、次のような同じ結果を得たいと考えています。

SELECT * FROM Table_Name WHERE TYPE IN ('AB','CD','EF')

トリックを行う方法はありますか?動的 SQL を使用できますか? 可能であれば、この場合どのように使用できますか?

4

1 に答える 1

1

次を使用できます。

CREATE PROCEDURE myProc (@typy NVARCHAR(299))
AS

DECLARE @SQL NVARCHAR(4000)
SET @SQL='SELECT * from table_name where typ in ('+@typy+')'
EXEC(@SQL)

そして、実行します:

DECLARE @return_value int
EXEC    @return_value = [myProc]
        @typy = N'''AB'',''BC'''
于 2013-03-05T11:48:51.763 に答える