簡體   English   中英

執行插入,然后登錄一個SQL命令

[英]Execute an insert and then log in one SQL command

我被要求實現一些代碼,這些代碼將更新MS SQL Server數據庫中的一行,然后使用存儲的proc將更新插入歷史表中。 由於我們無法控制數據庫,因此我們無法添加存儲的proc來執行此操作。 我知道您可以在存儲過程中進行更新,然后在另一個存儲過程中調用execute。 我可以使用一個SQL命令將其設置為在代碼中執行此操作嗎?

可以在同一條語句中運行它們(以分號分隔單獨的命令),也可以使用事務來運行它們,以便在第二條失敗時回退第一條語句。

您實際上並不需要為此存儲的過程。 問題的實質歸結為您是否可以控制所有插入物。 如果實際上您可以訪問所有插入,則只需將插入包裝到數據表中,然后將插入包裝到歷史表中就可以。 這將確保兩者都完成以使“成功”發生。 但是,在事務中按順序訪問表時,您需要確保不先鎖定historytable再鎖定datatable,否則可能會出現死鎖情況。

但是,如果您無法控制插入,則可以將觸發器添加到某些數據庫系統,從而使您可以訪問修改,插入或刪除的數據。 它可能會或可能不會為您提供所需的所有數據,例如誰執行了插入,更新或刪除操作,但它會告訴您更改了什么。

您還可以創建sql觸發器。

根據您的庫,通常可以將兩個查詢放在一個命令字符串中,並用分號分隔。

信息不足-什么是SQL Server? 為什么有歷史記錄表?

觸發器將執行此類操作。 MySQL的binlog可能對您更有用。

您說您不控制數據庫。 您控制訪問它的代碼嗎? 在此處添加日志,並將其完全排除在SQL Server之外。

謝謝大家的答復,以下是我最后要做的工作提要。 現在測試一下,如果發生故障,trans是否實際回滾。

sSQL = "BEGIN TRANSACTION;" & _
           " Update table set col1 = @col1, col2 = @col2" & _
           " where col3 = @col3 and " & _
           " EXECUTE addcontacthistoryentry @parm1, @parm2, @parm3, @parm4, @parm5, @parm6; " & _
           "COMMIT TRANSACTION;"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM