2013-08-01 35 views
0

我有我試圖通過一個WinForms程序,只需執行所有的腳本在目錄中運行以下腳本:阿爾特數據庫名稱錯誤

USE [master] 
GO 

EXEC('ALTER DATABASE [AT100Reporting] MODIFY Name = [IngeniumDynamics];') 
GO 

然而,當我嘗試運行此我得到的以下錯誤:

ALTER DATABASE statement not allowed within multi-statement transaction.

我GOOGLE了這一點,我可以找到關於它的最主要的是能夠改變DB報表應在自動提交模式下運行。進一步的搜索讓我改變我的腳本

USE [master] 
GO 

SET IMPLICIT_TRANSACTIONS OFF 

EXEC('ALTER DATABASE [AT100Reporting] MODIFY Name = [IngeniumDynamics];') 
GO 

SET IMPLICIT_TRANSACTIONS ON 

但我仍然有同樣的錯誤。有誰知道我需要做的,使該腳本正常運行

我也試過這種沒有EXEC

+0

聽起來像其他腳本之一的聲音可能已經啓動了一個沒有回滾或提交的事務。 –

+0

這是第一個運行的腳本 – Pete

+2

然後,在運行腳本之前,您的程序是否啓動了一個事務? –

回答

1

正如約阿希姆伊薩克森已經指出的那樣,這個問題是不是與腳本,但與正在運行的腳本的WinForms程序 - 我有我的TransactionScope的選項設置爲TransactionScopeOption.Required但如果我把它改爲TransactionScopeOption.Suppress查詢工作罰款

0

可以使用, sp_renamedb對OldDbName,NewDbName重命名數據庫:

exec ('sp_renamedb questionoverflow, stackoverflow') 

動態的方式:

declare @OldName varchar(50)='questionoverflow' 
declare @NewName varchar(50)='stackoverflow' 

exec('sp_renamedb '[email protected]+','[email protected]) 
+0

我剛試過這個,不幸的是現在我得到這個錯誤:過程'sys.sp_renamedb'不能在事務中執行。 – Pete

+0

因此,您位於同一個數據庫,您正在重命名並指定了一個事務? –

+0

@ N.pSubedi否,當重命名'[AT100Reporting]'時,問題中的腳本會將他放入'[master]'中。 –

0

那麼它應該工作:

首先設置單用戶模式:並重命名它。

declare @OldName varchar(50)='stackoverflow' 
declare @NewName varchar(50)='a' 

EXEC('ALTER DATABASE '[email protected] + ' SET SINGLE_USER') 

exec('sp_renamedb '[email protected]+','[email protected]) 

//And again put it in Multi-User Mode :: 
EXEC('ALTER DATABASE '[email protected]+ ' SET MULTI_USER')