使用sql server openxml和.Net的动态sql批量插入

时间:2012-11-07 05:58:16

标签: .net bulkinsert dynamic-sql sql-server-openxml

我编写了以下过程来使用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

1 个答案:

答案 0 :(得分:0)

我观察到SqlClient.BulkCopy比上面的OpenXML方法更好。因此,我相应地改变了我的逻辑。