2012-11-07 71 views
0

我編寫了以下過程以使用openxml進行批量插入。在我的情況下,表名和列名是動態的,因爲它們將在下面插入之前從.Net應用程序創建。存儲過程已成功運行,但未將任何數據插入表中。使用SQL Server openxml從.Net動態sql進行批量插入

請幫我

感謝advace。

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 '[email protected]+'('[email protected]+') 

Select '[email protected]+' From OpenXML(@Idoc,''/NewDataSet/Data'', 2) 

With('[email protected]+')'; 

Print @sql; 
Exec @Sql; 

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

END 
+0

雖然,我已經通過.net代碼本身生成sql來實現上述功能,但我只想知道上述sp有什麼問題。 –

+1

你可以發佈動態生成的插入語句嗎?我會建議比較你的動態sql語句從這裏存在的語句[http://msdn.microsoft.com/en-us/library/aa276847%28v=sql.80%29.aspx],因爲它取決於你的信息想從xml中提取。如果選擇返回肯定會出現反射。 – NeverHopeless

回答

0

我發現SqlClient.BulkCopy比上面的OpenXML方法更好的性能。因此我相應地改變了我的邏輯。