Sql Server Удалить Где В - PullRequest
0 голосов
/ 14 мая 2018

Я уже прочитал много сообщений на эту тему.

Я пытаюсь выполнить на реальном столе следующее:

DELETE FROM MYTABLE WHERE ID in (...)

, где в предложении может содержать 1,2 или много (> 3000) значений (производных от списка в c #)

У меня нет проблем с триггерами, ФК ...

Я не могу найти полный образец, используя значение или тип таблицы временных таблиц. И я не могу понять, как я могу вставить (3000 записей) во временную таблицу / значение / тип таблицы без проблем с производительностью. Я уже понимаю, чтобы сделать объединение после.

Я бы избежал хранимой процедуры, если это возможно

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

См. Передайте табличный параметр с использованием 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();
    }
    
0 голосов
/ 14 мая 2018

Шаг 1: Создать табличную переменную

CREATE TYPE SampleTable AS TABLE
(
        Id INT  
)
GO

Шаг 2. Вставьте переменную таблицы из списка C #

Шаг 3: Удалить данные таблицы

DECLARE @Sample_Id_List SampleTable READONLY
DELETE FROM YourTable WHERE Id IN (SELECT Id FROM @Sample_Id_List)
...