0

openxml を使用して一括挿入を行うには、次の手順を記述しました。私の場合、テーブル名と列名は動的です。これは、以下の挿入の直前に .Net アプリケーションから作成されるためです。ストアド プロシージャは正常に実行されていますが、テーブルにデータを挿入していません。

私を助けてください

よろしくお願いします。

CREATE PROCEDURE [dbo].[BulkUpdate]
@XmlDoc text,
@TableName nvarchar(50),
@ColumnNames nvarchar(4000),
@ColumnDefinition nvarchar(4000)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Declare @Idoc int;
Declare @Sql nvarchar(4000);
BEGIN TRANSACTION
Begin Try
Exec sp_xml_preparedocument @Idoc output, @XmlDoc;

Set @Sql = 'Insert into '+@TableName+'('+@ColumnNames+')

Select '+@ColumnNames+' From OpenXML(@Idoc,''/NewDataSet/Data'', 2)

With('+@ColumnDefinition+')';

Print @sql;
Exec @Sql;

Exec sp_xml_removedocument @Idoc;
Commit Transaction
End Try
Begin Catch
RollBack Transaction
End Catch

END
4

1 に答える 1

0

SqlClient.BulkCopy は、上記の OpenXML アプローチよりもパフォーマンスが優れていることがわかりました。したがって、それに応じてロジックを変更しました。

于 2012-12-17T19:12:30.403 に答える