【问题标题】:Bulk insert using sql server openxml with dynamic sql from .Net使用带有 .Net 的动态 sql 的 sql server openxml 批量插入
【发布时间】:2012-10-27 04:03:03
【问题描述】:

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

【问题讨论】:

  • 虽然,我已经通过从.net代码本身生成sql实现了上述功能,我只是想知道上面的sp有什么问题。
  • 你能发布动态生成的插入语句吗?我建议从语句 [msdn.microsoft.com/en-us/library/aa276847%28v=sql.80%29.aspx] exists here 中比较您的动态 sql 语句,因为这取决于您要从 xml 中提取什么信息。如果 select 返回的东西肯定会出现反射。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多