我需要将一个"id"数组传递给存储过程,以便从表中删除除数组中与id匹配的行之外的所有行.

我怎样才能用最简单的方式做到这一点?

推荐答案

使用存储过程:

EDIT:

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>

ORIGINAL POST:

将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

Sql相关问答推荐

Select /过滤postgr中的树 struct

更新在两个或多个面中具有交点的面

通过 Select 值的顺序进行排序ClickHouse

LEFT JOIN不显示计数0我期望的方式

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

如何在SQL Server中拆分包含字符和数字的列?

仅在日期相隔时递增(Oracle SQL)

SQL到Snowflake-转换嵌套的SELECT(值

如何用HeidiSQL在Firebird中设置超时?

从单个表达式中的分隔字符串中取平均值

我需要在 ASP.NET C# 中获取 2 个 SQL 查询结果的平均值

统计重复记录的总数

如何使用 Google BigQuery 中的条件根据特定列值连接列的 N 行?

如何计算两个非周期性时间序列+分组的重叠持续时间

获取所有用户的第一次和最后一次发货以及到达日期

如何优化仅返回符合条件的三条记录的查询?

COBOL\DB2作业(job)需要帮助?快来获取专业指导!

在 SQL 的每行选项中 Select 最大值

SQL Server Where 条件

如何在 SQLite 中将列的两个或多个相等的连续值合并为一个?