Dot-Net

在事務中使用“GO”

  • June 9, 2009

我正在建構一個嘗試在 App_Start 上安裝/升級數據庫的 Web 應用程序。安裝過程的一部分是確保數據庫安裝了 asp.net 功能。為此,我使用 System.Web.Management.SqlServices 對象。

我的意圖是在 SQL 事務中完成所有數據庫工作,如果其中任何一個失敗,則回滾事務並使數據庫保持不變。

SqlServices 對像有一個方法“Install”,它接受一個 ConnectionString 但不是一個事務。因此,我改為使用 SqlServices.GenerateApplicationServicesScripts,如下所示:

string script = SqlServices.GenerateApplicationServicesScripts(true, SqlFeatures.All, _connection.Database);
SqlHelper.ExecuteNonQuery(transaction, CommandType.Text, script, ...);

然後我使用 Enterprise Library 中的 SqlHelper。

但這會引發一個帶有大量錯誤的異常,下面有一些

Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Incorrect syntax near the keyword 'USE'.
Incorrect syntax near the keyword 'CREATE'.
Incorrect syntax near 'GO'.
The variable name '@cmd' has already been declared. Variable names must be unique within a query batch or stored procedure.

我假設在 SQL 事務中使用 GO 語句存在一些問題。

以這種方式執行時,如何讓這個生成的腳本工作。

GO 不是 SQL 關鍵字。

它是客戶端工具(如 SSMS)用來將整個腳本分成多個批次的批處理分隔符

您必須自己將腳本分成批處理,或者使用帶有“-c GO”的sqlcmd或 osql 來處理“GO”

引用自:https://stackoverflow.com/questions/971177