2011-10-29 41 views
3

以下方法無法正常工作,我肯定錯過了明顯但會很好,如果有人能解釋爲什麼不起作用。我需要動態更改數據庫。爲什麼我無法動態更改數據庫SQL Server 2008

打印輸出看起來不錯,但不會更改SQL Server下拉列表中的數據庫。

DECLARE @tempSql nvarchar(4000); 
DECLARE @FinalSQL nvarchar(4000); 
DECLARE @dbName varchar(100); 

SET @dbName = 'Pubs'; 
SET @tempSql = 'SELECT DB_NAME()'; 

SET @FinalSQL = 'USE ' + @dbName + '; EXEC sp_executesql N''' + @tempSql + ''''; 
EXEC (@FinalSQL) 
+0

SQLCMD模式是您的一個選擇嗎? –

回答

2

如果SQLCMD模式是您(SSMS內,例如),你可以這樣做一個選項:

:setvar dbname Pubs 
USE [$(dbname)] 
SELECT DB_NAME() 

或者,你原來的語法相當接近。試試這個:

DECLARE @db AS NVARCHAR(258); 
SET @db = QUOTENAME(N'Pubs'); 
EXEC(N'USE ' + @db + N'; EXEC(''SELECT DB_NAME();'');'); 
GO 
+0

我會調查sqlcmd.Which讓我認爲有沒有辦法待辦事項在動態SQL然後 – user9969

+0

嘗試使用quotename,但沒有區別它不起作用 – user9969

+0

@ user231465 - 它的工作,但它會得到重置,只要動態SQL批處理退出,因此您需要調用代碼從動態SQL本身執行,或者將代碼放在內部。 –

1

執行動態SQL是在它自己的範圍內進行。如你所見,所以你確實改變了當前的數據庫,但只在動態SQL的範圍內。

相關問題