2009-06-01 76 views

回答

9

不幸的是,沒有。

除非您可以將其餘批處理作爲動態SQL執行。

使用execute動態執行SQL將更改execute語句範圍的上下文,但不會對從中執行execute語句的範圍產生持續影響。

換句話說,這樣的:

DECLARE @db VARCHAR(100) 
SET @db = 'SweetDB' 
EXECUTE('use ' + @db) 

不會設置當前數據庫中永久的,但如果你改變了上面的代碼是這樣的:

DECLARE @db VARCHAR(100) 
SET @db = 'SweetDB' 
EXECUTE('use ' + @db + ';select * from sysobjects') 
select * from sysobjects 

那麼這兩個查詢的結果是不同的(假設你已經不在SweetDB中),因爲第一個選擇在execute內執行,在SweetDB中執行,但第二個不是。

0
declare @NewDB varchar(50) 
set @NewDB = 'NewDB' 
execute('use ' + @NewDB) 
+0

按照文檔(http://msdn.microsoft.com/en-us/library/ms188332.aspx),在數據庫中,」最後的更改只有等到EXECUTE語句的結尾「,所以這段代碼被記錄爲沒有給出預期的效果。 – 2009-06-01 23:32:33

0

#TempTables將presist跨越GOS

你可以在第一批,插入/選擇在必要時或任何後續批量數據創建表。

這裏是一些示例語法:

CREATE TABLE #YourTableName 
(
    col1 int   not null primary key identity(1,1) 
    ,col2 varchar(10) 
)