首页 > 解决方案 > Sql Server 删除在哪里

问题描述

我已经阅读了很多关于这个主题的帖子。

我正在尝试在真实桌子上执行以下操作:

DELETE FROM MYTABLE WHERE ID in (...)

where in子句可以包含 1,2 或多个 (>3000) 值(源自 c# 中的列表)

我没有关于触发器的问题,FK...

我找不到使用临时表表值或类型的完整示例。而且我无法理解如何在临时表/表值/类型中插入(3000 条记录)而不会出现性能问题。我已经明白之后要加入。

如果可能的话,我会避免存储过程

标签: sqlsql-serversql-delete

解决方案


请参阅使用 ADO.Net 传递表值参数,这是该答案的来源。

  1. 在 SQL Server 中创建类型

    CREATE TYPE [dbo].[MyDataType] As Table
    (
        cust_id INT
    )
    
  2. 在 C# 中创建数据表

    DataTable myDataTable = new DataTable("dbo.MyDataType");
    myDataTable.Columns.Add("cust_id", typeof(Int32));
    myDataTable.Rows.Add(1);
    myDataTable.Rows.Add(2);
    
  3. 创建 SQL 参数并执行查询

    using(var command = new SqlCommand(connection, "DELETE FROM MYTABLE WHERE EXISTS (SELECT 1 FROM @myData WHERE cust_id = ID)"))
    {       
      SqlParameter parameter = new SqlParameter();
      parameter.ParameterName = "@myData";
      parameter.SqlDbType = System.Data.SqlDbType.Structured;
      parameter.Value = myDataTable;
      command.Parameters.Add(parameter);
    
      // execute delete
      command.ExecuteNonQuery();
    }
    

推荐阅读