0

我想插入一系列值到一對SQL表中,數據需要一些預處理(如附加一個公共時間戳和兩個表中數據的一些修改)。理想情況下,我寧願將我的代碼與直接的SQL語句屏蔽,而選擇使用存儲過程。我怎樣才能將這些值傳遞給存儲過程?如何將值行傳遞到SQL Server存儲過程?

謝謝。

編輯我使用SQL Server 2012,但要與2008兼容如果有2012具體的解決方案,請讓我知道,我會很樂意考慮。

+1

的SQL Server的什麼版本見? –

+0

@MartinSmith請參閱編輯 – gt6989b

回答

2

您可以在存儲過程中使用表值參數。這允許傳遞一個表作爲參數,因此您可以根據需要定義參數的結構。

見 '使用表值參數(數據庫引擎)' 上MSDN - http://technet.microsoft.com/en-us/library/bb510489.aspx

要調用這樣的SP,參見,例如,How to pass table value parameters to stored procedure from .net code。這個問題已經回答了幾次。

+0

這意味着我必須在代碼中創建並填充臨時表,然後將它傳遞給存儲過程?將它放入VALUES字符串中以便由動態sql中的proc執行它會更好嗎? – gt6989b

+0

更新的答案回答你的問題 –

+0

不,這不會更好,表值參數是一個更好的選擇 – BlackTigerX

3

如果您正在開發SQL Server 2008+,那麼您可以使用表值參數。 See documentation

+0

這意味着我必須在代碼中創建並填充臨時表,然後將其傳遞給存儲過程?將它放入VALUES字符串中以便由動態sql中的proc執行它會更好嗎? – gt6989b

+0

@ gt6989b,這取決於你,但我強烈建議只使用動態SQL作爲最後的手段。閱讀[this](http:// http://www.sommarskog.se/dynamic_sql.html)。 –

+0

我不是被迫做同樣的事情嗎?我在Python中工作,而不是C#。現在我必須執行動態SQL來構建臨時表並插入它,然後將結果傳遞給存儲過程。字符串避免了所有這個問題。我真的不喜歡我的Python中的原始SQL代碼 – gt6989b

2

以XML格式發送數據並將其轉換爲多行。像

SELECT 
Tbl.Col.value('(span/b)[1]', 'nvarchar(max)') AS [key], 
Tbl.Col.value('(span/var)[1]', 'nvarchar(max)') AS [position], 
Tbl.Col.value('@title', 'nvarchar(max)')  AS [tooltip], 
Tbl.Col.value('(code)[1]', 'nvarchar(max)')  AS [value] 

FROM @xmlData.nodes('/ul/li') Tbl(Col) 

的東西更多的細節

相關問題