1

次のようなストア プロシージャにクエリがあります。

CREATE PROCEDURE DELETEREP (@id INT) 
AS 
    DELETE FROM TABLE 
    WHERE  ID = @id 

次に、このストア プロシージャを別のストアド プロシージャから次のように実行します。

exec(Deleterep) from here i want to pass multiple ids like 

where  id in (selec id from table2)

複数の ID を SP に渡したい。カーソルやループを使用してストアプロシージャを複数回呼び出したくないので、避けたいです。

誰かが私にどのように進めるかのアイデアを教えてもらえますか?

4

3 に答える 3

2

Devart が提案したように XML を使用できますが、さらに 2 つのオプションがあります。

カンマ区切りのリスト (他の方法で分割できます。ここでは、xml への変換を使用しました):

create procedure usp_test1(@list nvarchar(max))
as
begin
    declare @data xml

    select @data = cast('<id>' + replace(@list, ', ', '</id><id>') + '</id>' as xml)

    select *
    from test
    where id in
      (
          select t.c.value('.', 'int') as a
          from @data.nodes('id') as t(c)
      )
end

またはユーザー定義のテーブル タイプ:

create type list as table (id int primary key)

create procedure usp_test2(@list list readonly)
as
begin
    select *
    from test
    where id in (select id from @list)
end

sql fiddle demo2つの例で見てください

于 2013-08-28T05:40:56.503 に答える
1
Try this one -

CREATE PROCEDURE dbo.usp_DELETEREP 
(
    @XML XML
) 
AS BEGIN

    DELETE FROM dbo.[TABLE] 
    WHERE ID IN (
        SELECT t.c.value('.', 'BIGINT')
        FROM @XML.nodes('/data/id') t(c)
    )

END

GO

DECLARE @XML XML
SELECT @XML = '
<data>
    <id>1</id>
    <id>2</id>
</data>'

EXEC usp_DELETEREP @XML = @XML
于 2013-08-28T05:21:00.650 に答える