Я легко смог сделать это, создав хранимую процедуру SQL2005 CLR, которая содержала внутренний набор данных.
Видите ли, новый SqlDataAdapter будет. По умолчанию заполнить sproc с несколькими результирующими наборами в набор данных из нескольких таблиц. Данные в этих таблицах, в свою очередь, могут быть вставлены в таблицы #Temp в вызывающем sproc, который вы хотите записать. dataset.ReadXmlSchema покажет вам схему каждого набора результатов.
Шаг 1: Начните писать sproc, который будет считывать данные из набора с несколькими наборами результатов
а. Создайте отдельную таблицу для каждого набора результатов в соответствии со схемой.
CREATE PROCEDURE [dbo].[usp_SF_Read] AS
SET NOCOUNT ON;
CREATE TABLE #Table01 (Document_ID VARCHAR(100)
, Document_status_definition_uid INT
, Document_status_Code VARCHAR(100)
, Attachment_count INT
, PRIMARY KEY (Document_ID));
б. На этом этапе вам может потребоваться объявить курсор для повторного вызова sproc CLR, который вы создадите здесь:
Шаг 2: Сделать CLR Sproc
Partial Public Class StoredProcedures
<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub usp_SF_ReadSFIntoTables()
End Sub
End Class
а. Подключите используя New SqlConnection("context connection=true")
.
б. Настройте объект команды (cmd) для хранения sproc с несколькими наборами результатов.
с. Получить все данные, используя следующее:
Dim dataset As DataSet = New DataSet
With New SqlDataAdapter(cmd)
.Fill(dataset) ' get all the data.
End With
'you can use dataset.ReadXmlSchema at this point...
* * Д тысячу двадцать восемь. Выполните итерацию по каждой таблице и вставьте каждую строку в соответствующую временную таблицу (которую вы создали на первом шаге выше).
Конечная нота:
По моему опыту, вы можете захотеть установить некоторые отношения между вашими таблицами, чтобы вы знали, из какого пакета поступила каждая запись.
Вот и все!
~ Шон, около Сиэтла