Передача всего набора данных в хранимую процедуру в MSSQL 2005 - PullRequest
3 голосов
/ 05 октября 2010

Как передать объект набора данных в хранимую процедуру?Набор данных состоит из нескольких таблиц, и мне нужно будет иметь доступ к ним из SQL.

Ответы [ 3 ]

3 голосов
/ 05 октября 2010

Вы можете использовать параметр с табличным значением для передачи одной таблицы в SQL 2008 http://msdn.microsoft.com/en-us/library/bb675163.aspx

или

обратитесь к этой статье и используйте процедуру SQL CLR для передачи набора данных http://blogs.msdn.com/b/jpapiez/archive/2005/09/26/474059.aspx

2 голосов
/ 05 октября 2010

Похоже, вы можете сделать это с SQL Server 2008 или новее (по крайней мере, с DataTable). Вот ссылки:

http://www.eggheadcafe.com/community/aspnet/10/10138579/passing-dataset-to-stored-procedure.aspx

http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

0 голосов
/ 05 октября 2010

Как говорится в статье из MusiGenesis '

В SQL Server 2005 и более ранних версиях невозможно передать табличную переменную в качестве параметра хранимой процедуре.Когда нескольким строкам данных в SQL Server необходимо отправить несколько рядов данных в SQL Server, разработчикам приходилось либо отправлять по одной строке за раз, либо предлагать другие обходные пути для удовлетворения требований.Хотя недавно разработчик VB.Net сообщил мне, что в .Net доступен объект SQLBulkCopy для одновременной отправки нескольких строк данных на SQL Server, данные по-прежнему не могут быть переданы в хранимый процесс.

С риском для очевидности вот еще два подхода

Параметризация вашей процедуры обработки

Вы можете пересмотреть оценку, если вам действительно и действительно нужно пройти общеетабличная переменная.Хотя иногда этого нельзя избежать, причина, по которой это более позднее дополнение к набору функций, которыми обладает MS SQL Server, частично заключается в том, что обычно вы можете обойти его, структурируя свои хранимые процедуры и поток обработки данных.

Если вы в состоянии «параметризовать» свой процесс, то вы сможете позволить хранимым процедурам получать полный набор данных на основе ограниченного числа параметров.

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

Темп-таблицы

Помимо вышеизложенного всегда есть подход с временными таблицами, которые могут быть более или менее сложнымизависитg о возможностях совместного использования данных, которые вам необходимы (обмен может быть между пользователями БД, пользователями приложений, соединениями, процессами и т. д.).

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

...