2013-06-04 63 views
0

我想decamble Tsql遊標,但傳遞一個字符串變量而不是SELECT語句。這是可能的嗎?你會怎麼做?我在下面有沒有工作。尋找類似:聲明SQL遊標傳遞變量名

DECLARE @sql varchar(1000) 
SET @sql = 'SELECT sysobjects.name 
      FROM [#database#].[dbo].sysobjects' 
SET @sql = REPLACE(@sql, '#database#', @MyDBName) 
DECLARE c CURSOR LOCAL FOR @sql 
+2

存在未記錄的存儲過程,名爲sp_msforeachdb,您可能會發現它很有用。 –

回答

0

你必須使整個光標動態,你必須使用sp_executesql,這應該工作:

DECLARE @sql nvarchar(1000) -- needs to be nvarchar! 
SET @sql = 'DECLARE c CURSOR FOR SELECT sysobjects.name 
      FROM [#database#].[dbo].sysobjects' 
SET @sql = REPLACE(@sql, '#database#', @MyDBName) 
EXEC sp_executesql @sql 
OPEN c 
.... 

但請點擊這裏閱讀時首先要使用動態SQL Server中的SQL:Obligatory dynamic SQL info link

+0

c執行完後會在範圍內嗎? –

+0

@TonyHopkinson感謝提示,本地遊標將無法正常工作,請參閱:http://www.sommarskog.se/dynamic_sql.html#cursor0我更改了代碼。 –