3

私はダイナミックsqlieを使用しています

DECLARE @searchstring VARCHAR(500)
DECLARE @str VARCHAR(MAX)
SELECT @str = 'SELECT * FROM Table1 WHERE ' + @searchstring
EXECUTE @str   

私が必要とするのは、上記の動的 SQL から 1 つの列値を選択して別SP の列値を渡したいということです。たとえば、ID 列値が必要で、それを GetAnotherData @Ids という名前の別の sp に渡します。どうやってやるの?

4

2 に答える 2

5

まあ、Alexander Fedorenko の例に行くことができますが、一時テーブルを作成したくない場合は、出力 xml パラメータを使用して ID を渡すことができます。

declare @stmt nvarchar(max), @Data xml, @searchstring nvarchar(max)

select @stmt = '
    select @Data = (
        select id
        from Table1
        where ' + @searchstring + '
        for xml raw(''Data'')
    )
'

exec sp_executesql
    @stmt = @stmt,
    @params = N'@Data xml output',
    @Data = @Data output

select
    T.C.value('@id', 'int') as id
from @Data.nodes('Data') as T(C)

sql fiddle demo

于 2013-09-22T07:44:32.203 に答える
0

次の例では、1 つの Id 列を持つユーザー定義のテーブル型を作成します。さらに、INSERT @RetIds EXEC(@STR)ステートメントはパラメーター リストに入力し、値をストアド プロシージャに渡します。

CREATE TYPE RetIds AS TABLE
 (
  Id int
  )

DECLARE @searchstring varchar(500) = 'AND SearchCol = 1'
DECLARE @str varchar(max)
SELECT @str ='SELECT Id FROM dbo.test6 WHERE 1 = 1 ' + @searchstring

DECLARE @RetIds AS RetIds
INSERT @RetIds
EXEC(@str)
EXEC dbo.ExecIds @RetIds

デモを見るSQLFiddle

于 2013-09-22T06:57:28.677 に答える