Как вставить таблицу данных с помощью хранимой процедуры в SQL Server - PullRequest
0 голосов
/ 02 июня 2019

Я попытался вставить много записей из таблицы данных в таблицу SQL Server с помощью хранимой процедуры. Мне нужно вставить записи таблицы данных все вместе.

Я использую язык программирования C # и хочу отправить много записей на SQL Server с помощью хранимой процедуры ADO.net. Я хочу знать о типах таблиц данных и использовать их, если это мне поможет.

1 Ответ

1 голос
/ 02 июня 2019

Чтобы эффективно передать много строк хранимой процедуре, используйте табличный параметр . Приложение C # может указать структурированный тип параметра и значение таблицы данных. Для максимальной производительности убедитесь, что типы столбцов DataTable соответствуют типам столбцов типа таблицы на стороне сервера (включая максимальную длину для строковых столбцов).

Ниже приведен пример выдержки из ссылки на документацию выше:

// Assumes connection is an open SqlConnection object.  
using (connection)  
{  
  // Create a DataTable with the modified rows.  
  DataTable addedCategories = CategoriesDataTable.GetChanges(DataRowState.Added);  

  // Configure the SqlCommand and SqlParameter.  
  SqlCommand insertCommand = new SqlCommand("usp_InsertCategories", connection);  
  insertCommand.CommandType = CommandType.StoredProcedure;  
  SqlParameter tvpParam = insertCommand.Parameters.AddWithValue("@tvpNewCategories", addedCategories);  
  tvpParam.SqlDbType = SqlDbType.Structured;  

  // Execute the command.  
  insertCommand.ExecuteNonQuery();  
}

Вот фрагменты T-SQL для создания типа таблицы и процедуры.

CREATE TYPE dbo.CategoryTableType AS TABLE  
    ( CategoryID int, CategoryName nvarchar(50) );
GO

CREATE PROC dbo.usp_InsertCategories
AS
@tvpNewCategories dbo.CategoryTableType READONLY
INSERT INTO dbo.Categories (CategoryID, CategoryName)  
    SELECT nc.CategoryID, nc.CategoryName FROM @tvpNewCategories AS nc;
GO

Даже для тривиальных вставок производительность TVP может обеспечить производительность, аналогичную SqlBulkCopy (много тысяч в секунду) с преимуществом интерфейса хранимых процедур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...