2013-01-11 10 views
9

È necessario eseguire lo script di aggiornamento nel database corrente (ALTER DATABASE...), ma non è possibile utilizzare il suo nome implicito. È possibile utilizzare alcune funzioni per ottenere il nome db corrente e utilizzare all'interno di ALTER DATABASE (Sql Server 2005 e versioni successive)? Ho provato a utilizzare db_name(), ma non funziona.Database attuale di ALTER senza utilizzare il nome

select db_name(); funziona

ALTER DATABASE db_name() ... non funziona

risposta

15

È necessario usare qualcosa come

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

o .. ancora più semplice

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

Questo sarà ancora errore alla db_name() – Raj

+0

Penso che sia a causa dell'operazione sullo stesso database, Ecco qualcosa di utile per te http://blog.sqlauthority.com/2010/02/11/sql-server-alter-database-dbname-set-single_user-with-rollback- immediato/ – brykneval

+0

@Raj - quando ho digitato per primo questo, ho pensato che potrei usare la funzione db_name() nell'espressione, ma è necessario prima eseguire il cast in un varchar. Modificherò questo per riflettere questo. –

0

Prova questo

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

Raj

29

In realtà qualcosa di più simile a questo è probabilmente un po 'meglio se si sta modificando il database corrente:

ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 90

+4

Questa è la risposta più accurata, ma si noti che funziona solo per SQL Server 2012 e versioni successive. La domanda originale è contrassegnata per SQL Server 2005. Vedere http://stackoverflow.com/questions/19238834/alter-database-current-exception –

+2

@AdrianEdwards, true, ma è anche il primo risultato quando si effettua la ricerca su google, 'server sql alterare il database attuale del database'. :) –

Problemi correlati