2013-01-11 50 views
9

我需要在當前數據庫(ALTER DATABASE...)上運行更新腳本,但不能使用其隱式名稱。有可能使用一些函數獲取當前數據庫名稱並在ALTER DATABASE(Sql Server 2005及更高版本)中使用?我嘗試使用db_name(),但不起作用。ALTER當前數據庫不使用其名稱

select db_name();工作

ALTER DATABASE db_name() ...不起作用

回答

15

你需要使用像

declare @dbname varchar(100) 
set @dbname=quotename(db_name()) 
exec('alter database '[email protected]+' ...'); 

或..更簡單

set @sql='alter database '+quotename(db_name())+' ...'; 
exec(@sql) 
+0

這將仍處於DB_NAME錯誤() – Raj

+0

我認爲這是由於在同一個數據庫上的操作,下面是對你有用的東西 http://blog.sqlauthority.com/2010/02/11/sql-server-alter-database-dbname-set-single_user-with-rollback-立即/ – brykneval

+0

@Raj - 當我第一次輸入時,我認爲我可以使用表達式中的函數db_name(),但它需要首先將其轉換爲varchar。我會編輯這個來反映這一點。 –

0

試試這個

DECLARE @DBName sysname; 
SET @DBName = (SELECT db_name()); 
DECLARE @SQL varchar(1000); 
SET @SQL = 'ALTER DATABASE '[email protected]+' .......' 

拉吉

29

其實更多的東西一樣,這是可能會更好一點,如果你改變當前數據庫:

ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 90

+4

這是最好的答案,但請注意,這隻適用於SQL Server 2012及更高版本。原始問題標記爲SQL Server 2005. 請參閱http://stackoverflow.com/questions/19238834/alter-database-current-exception –

+2

@AdrianEdwards,true,但它也是第一次命中時,谷歌sql服務器改變數據庫當前數據庫「。 :) –

相關問題