2013-06-04 62 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我更改了代码。 –