我有一個數據庫,其中存儲過程的數量是非常高的。但是有一些存儲過程沒有在存儲過程級別啓動事務。如何SQL Server存儲在存儲過程中的SQL語句
現在我想把交易,這些存儲過程以自動方式。目前我正在使用PowerShell來執行此操作。
但問題是,我可以得到存儲過程的定義,但我不能得到單個SQL語句在存儲過程中,這樣我可以寫一些事務回滾/提交條件
例如,如果上述交易失敗@@errorcount <> 0 then rollback
任何人都可以請讓我知道如何做到這一點,還是有其他的方法來做到這一點?如果我可以分裂SQL語句(這是在存儲過程中)我可以寫在PowerShell的登錄操作的存儲過程
請幫
在此先感謝
這聽起來像一個非常糟糕的主意。我不會以編程方式執行此操作。編寫能夠決定放置這些語句的適當位置的邏輯非常困難。除此之外,最安全的方法是綁定到Visual Studio中的查詢分析器引擎,並讓它解析過程代碼並將其分解爲單獨的語句。 –
另外,你是如何從數據庫中提取存儲的proc代碼?你不使用源代碼控制系統? –
在proc中添加大量的BEGIN TRAN-COMMIT TRAN邏輯通常會導致更多的阻塞,並可能導致命令超時和更頻繁的死鎖。如果COMMIT被遺漏在某個地方,那麼交易可以保持開放並且不會被提交,直到通過某種方式(可能強行)關閉連接並且所完成的工作被丟棄並丟失。如果你正在編程創建新的'樣板'CRUD程序,那將是一回事,但我必須投入第三次(第四次)投票。這不是你最好的主意。 –