2010-10-27 44 views
1

如何在SQL Server 2008中傳遞SQL過程中的對象列表?如何在SQL Server 2008中傳遞SQL過程中的對象列表?

我想避免這種情況:

foreach (var item in itemList) 
{ 
    myContext.ExecuteStoreCommand("EXEC MyAtomicProc ... item ...); 
} 

我想做一個foreach存儲過程英寸

如何傳遞對象的C#列表和EF執行此過程:

myContext.ExecuteStoreCommand("EXEC MyGlobalProc ... itemList ...); 

回答

1

你不能。您可以:

  • 提供標值(變量)
  • 提供值

的表,但你不能在物體通過。對象不在SQL層中以與.NET運行時兼容的方式存在。

+0

好的。當我在c#中執行循環時,與T-SQL中的同一種循環相比,性能非常糟糕。 – 2010-10-27 11:57:21

+0

正如TomTom所說,將對象列表轉換爲TABLE。尋找傳遞XML參數以及如何將它們用作SQL Server中的表。 – 2010-10-27 12:03:22

+0

如果你正在討論在t-sql中做一個遊標循環,不要指望任何類型的性能優勢。 – JeffO 2010-10-27 13:00:09

1

我喜歡做的是將對象列表序列化爲一個字符串,然後將其作爲數據庫參數傳遞。

然後在存儲過程中,您可以使用XML轉換來創建一個臨時表,您可以將其加入。這使您可以輕鬆地批量更新和插入(使用左連接)

這將鍵值對列表轉換爲臨時表。你可以將它提取到一個真正的列表:

DECLARE @xmlHandle INT 
DECLARE @pixelParametersTable TABLE (
[Key] VARCHAR(10) PRIMARY KEY, 
[Value] VARCHAR(MAX)) 
EXEC sp_xml_preparedocument @xmlHandle output, @pixelParameters 

INSERT INTO @pixelParametersTable 
SELECT [Key], [Value] 
FROM OPENXML (@xmlHandle, '/PixelRequestParameters/Parameter',1) 
WITH ( 
[Key] VARCHAR(10) 'Key', 
[Value] VARCHAR(8000) 'Value' 
) 
EXEC sp_xml_removedocument @xmlHandle 
相關問題