我需要在當前數據庫(ALTER DATABASE...
)上運行更新腳本,但不能使用其隱式名稱。有可能使用一些函數獲取當前數據庫名稱並在ALTER DATABASE
(Sql Server 2005及更高版本)中使用?我嘗試使用db_name()
,但不起作用。ALTER當前數據庫不使用其名稱
select db_name();
工作
ALTER DATABASE db_name() ...
不起作用
我需要在當前數據庫(ALTER DATABASE...
)上運行更新腳本,但不能使用其隱式名稱。有可能使用一些函數獲取當前數據庫名稱並在ALTER DATABASE
(Sql Server 2005及更高版本)中使用?我嘗試使用db_name()
,但不起作用。ALTER當前數據庫不使用其名稱
select db_name();
工作
ALTER DATABASE db_name() ...
不起作用
你需要使用像
declare @dbname varchar(100)
set @dbname=quotename(db_name())
exec('alter database '[email protected]+' ...');
或..更簡單
set @sql='alter database '+quotename(db_name())+' ...';
exec(@sql)
試試這個
DECLARE @DBName sysname;
SET @DBName = (SELECT db_name());
DECLARE @SQL varchar(1000);
SET @SQL = 'ALTER DATABASE '[email protected]+' .......'
拉吉
其實更多的東西一樣,這是可能會更好一點,如果你改變當前數據庫:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 90
這是最好的答案,但請注意,這隻適用於SQL Server 2012及更高版本。原始問題標記爲SQL Server 2005. 請參閱http://stackoverflow.com/questions/19238834/alter-database-current-exception –
@AdrianEdwards,true,但它也是第一次命中時,谷歌sql服務器改變數據庫當前數據庫「。 :) –
這將仍處於DB_NAME錯誤() – Raj
我認爲這是由於在同一個數據庫上的操作,下面是對你有用的東西 http://blog.sqlauthority.com/2010/02/11/sql-server-alter-database-dbname-set-single_user-with-rollback-立即/ – brykneval
@Raj - 當我第一次輸入時,我認爲我可以使用表達式中的函數db_name(),但它需要首先將其轉換爲varchar。我會編輯這個來反映這一點。 –