Каков наилучший способ передачи DataTable в хранимую процедуру? - PullRequest
3 голосов
/ 26 ноября 2010

Мне нужно передать DataTable в хранимую процедуру в MS SQL 2008, чтобы вставить несколько строк в таблицу одновременно.Я сталкивался с методами, которые используют XML-документы для этого и даже передавая списки в качестве данных изображения.

Каков наилучший способ сделать это?

Дайте примеры кода и / или ссылки, если это возможно.

Ответы [ 2 ]

5 голосов
/ 26 ноября 2010
1 голос
/ 26 ноября 2010

Табличные параметры являются хорошим вариантом, лично я предпочитаю создавать временную таблицу в вызывающей хранимой процедуре и читать из временной таблицы в вызываемой процедуре.

Так в коде это будет:

CREATE PROC DoStuff
AS BEGIN
    CREATE TABLE #tobeinserted (Data1 INT, Data2 INT...)
    EXEC InsertRows
END

CREATE PROC InsertRows
AS BEGIN
    INSERT INTO Table1 SELECT * FROM #tobeinserted
END

Это работает надежно, потому что временные таблицы имеют время жизни до завершения хранимой процедуры, в которой они созданы. Преимущество этого метода заключается в том, что во временных таблицах, в отличие от табличных параметров, могут быть определены (кластеризованные) индексы, поэтому поиск в этих таблицах может быть очень быстрым. Недостатком является то, что вы не можете запустить два экземпляра SP одновременно.

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