我想插入一系列值到一對SQL表中,數據需要一些預處理(如附加一個公共時間戳和兩個表中數據的一些修改)。理想情況下,我寧願將我的代碼與直接的SQL語句屏蔽,而選擇使用存儲過程。我怎樣才能將這些值傳遞給存儲過程?如何將值行傳遞到SQL Server存儲過程?
謝謝。
編輯我使用SQL Server 2012,但要與2008兼容如果有2012具體的解決方案,請讓我知道,我會很樂意考慮。
我想插入一系列值到一對SQL表中,數據需要一些預處理(如附加一個公共時間戳和兩個表中數據的一些修改)。理想情況下,我寧願將我的代碼與直接的SQL語句屏蔽,而選擇使用存儲過程。我怎樣才能將這些值傳遞給存儲過程?如何將值行傳遞到SQL Server存儲過程?
謝謝。
編輯我使用SQL Server 2012,但要與2008兼容如果有2012具體的解決方案,請讓我知道,我會很樂意考慮。
您可以在存儲過程中使用表值參數。這允許傳遞一個表作爲參數,因此您可以根據需要定義參數的結構。
見 '使用表值參數(數據庫引擎)' 上MSDN - http://technet.microsoft.com/en-us/library/bb510489.aspx
要調用這樣的SP,參見,例如,How to pass table value parameters to stored procedure from .net code。這個問題已經回答了幾次。
這意味着我必須在代碼中創建並填充臨時表,然後將它傳遞給存儲過程?將它放入VALUES字符串中以便由動態sql中的proc執行它會更好嗎? – gt6989b
更新的答案回答你的問題 –
不,這不會更好,表值參數是一個更好的選擇 – BlackTigerX
如果您正在開發SQL Server 2008+,那麼您可以使用表值參數。 See documentation。
這意味着我必須在代碼中創建並填充臨時表,然後將其傳遞給存儲過程?將它放入VALUES字符串中以便由動態sql中的proc執行它會更好嗎? – gt6989b
@ gt6989b,這取決於你,但我強烈建議只使用動態SQL作爲最後的手段。閱讀[this](http:// http://www.sommarskog.se/dynamic_sql.html)。 –
我不是被迫做同樣的事情嗎?我在Python中工作,而不是C#。現在我必須執行動態SQL來構建臨時表並插入它,然後將結果傳遞給存儲過程。字符串避免了所有這個問題。我真的不喜歡我的Python中的原始SQL代碼 – gt6989b
以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)
的東西更多的細節
的SQL Server的什麼版本見sqlxml? –
@MartinSmith請參閱編輯 – gt6989b