我寫了一個名爲FooUpsert
的存儲過程,它在各種表中插入和更新數據。它需要一些提供數據的數字和字符串參數。這個程序狀態良好,我不想修改它。如何將值從存儲過程中的表參數傳遞到另一個存儲過程?
接下來,我正在編寫另一個存儲過程,該服務器作爲一種批量插入/更新。
該過程作爲一個原子事務來完成它的工作是等價的。一些數據可以插入/更新,有些則不可接受。
在我看來,這樣做的適當方式是設置一個表值過程,比如FooUpsertBulk
。我開始用一個表參數編寫這個存儲過程,該參數保存的數據類似於傳遞給FooUpsert
的數據,我的想法是我可以一次讀取一行,並調用FooUpsert
獲取每行中的值。我意識到這可能不是最佳做法,但再次,FooUpsert
已被寫入,加上FooUpsertBulk
將一天最多運行幾次。
問題是,在FooUpsertBulk
,我不知道如何迭代行並將每行中的值作爲參數傳遞給FooUpsert
。我意識到我可以更改FooUpsert
以接受表值參數,但我不想重寫FooUpsert
。
你可以在你身邊的一個SQL忍者那裏請告訴我如何做到這一點?
我的SQL Server是MS-SQL 2008
你將被卡住做這行通過痛苦行.....換句話說慢。無論如何,你將不得不改變你的一個程序。聽起來你必須添加一個**咳嗽**光標**咳嗽**到FooUpsertBulk,以便通過你的基於表的有價值的參數並逐行調用另一個proc。 – 2015-02-06 21:28:51
^^^^完全不同意。無論如何,你必須更新存儲過程。只要讓一個proc在基於集合的操作中完成這兩件事情。 – Zane 2015-02-06 21:34:49
,所以你可以調用'FooUpsertBulk'傳入多行數據,只能在這個過程中循環訪問它們,所以每行調用'FooUpsert'?如果是這樣,那麼和現在的操作有什麼不同呢?並且當前正從另一個proc或應用程序代碼調用FooUpsert? – 2015-02-06 21:36:02