2013-01-11 10 views
9

Potrzebuję uruchomić skrypt aktualizacyjny na bieżącej bazie danych (ALTER DATABASE...), ale nie można użyć niejawnej jego nazwy. Czy można użyć jakiejś funkcji, aby uzyskać aktualną nazwę db i użyć wewnątrz ALTER DATABASE (Sql Server 2005 i wyżej)? Próbowałem użyć db_name(), ale nie działa.ALTER bieżąca baza danych bez użycia jej nazwy

select db_name(); działa

ALTER DATABASE db_name() ... nie działa

Odpowiedz

15

trzeba użyć czegoś jak

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

lub .. nawet prostsze

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

Ten błąd będzie nadal w nazwa_bazy() – Raj

+0

myślę, że jest ze względu na działanie w tej samej bazie danych, tutaj jest coś pożytecznego dla ciebie http://blog.sqlauthority.com/2010/02/11/sql-server-alter-database-dbname-set-single_user-with-rollback- natychmiast/ – brykneval

+0

@Raj - kiedy po raz pierwszy wpisałem to, założyłem, że mogę użyć funkcja db_name() w wyrażeniu, ale najpierw wymaga rzucenia do varcharu. Zmienię to, aby to odzwierciedlić. –

0

Spróbuj

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

Raj

29

Faktycznie coś bardziej jak to jest chyba trochę lepiej jeśli zmiany aktualnej bazy danych:

ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 90

+4

To jest najmodniejsza odpowiedź, ale zauważ, że działa to tylko dla SQL Server 2012 i nowszych wersji. Oryginalne pytanie jest oznaczone dla SQL Server 2005. Zobacz http://stackoverflow.com/questions/19238834/alter-database-current-exception –

+2

@AdrianEdwards, prawda, ale jest to także pierwsze trafienie podczas googlowania, 'serwer sql zmienić bieżącą bazę danych bazy danych'. :) –