1. ホーム
  2. sql

ストアドプロシージャへのパラメータ配列の渡し方

2023-10-25 15:06:13

質問

私は、ストアドプロシージャに "id" の配列を渡す必要があり、配列内の id に一致する行を除いて、テーブルからすべての行を削除する必要があります。

どのように私は最も簡単な方法でそれを行うことができますか?

どのように解決するのですか?

ストアドプロシージャを使用します。

EDITを使用します。 Listをシリアライズするための補語(あるいは他のもの)。

List<string> testList = new List<int>();

testList.Add(1);
testList.Add(2);
testList.Add(3);

XmlSerializer xs = new XmlSerializer(typeof(List<int>));
MemoryStream ms = new MemoryStream();
xs.Serialize(ms, testList);

string resultXML = UTF8Encoding.UTF8.GetString(ms.ToArray());

結果(XMLパラメータで使用可能な状態)。

<?xml version="1.0"?>
<ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <int>1</int>
  <int>2</int>
  <int>3</int>
</ArrayOfInt>


元記事です。

XMLをパラメータとして渡します。

<ids>
    <id>1</id>
    <id>2</id>
</ids>


CREATE PROCEDURE [dbo].[DeleteAllData]
(
    @XMLDoc XML
)
AS
BEGIN

DECLARE @handle INT

EXEC sp_xml_preparedocument @handle OUTPUT, @XMLDoc

DELETE FROM
    YOURTABLE
WHERE
    YOUR_ID_COLUMN NOT IN (
        SELECT * FROM OPENXML (@handle, '/ids/id') WITH (id INT '.') 
    )
EXEC sp_xml_removedocument @handle