声明传入变量名的SQL Cursor

时间:2013-06-04 11:27:07

标签: tsql cursor

我想判断一个Tsql游标,但是传递一个字符串变量而不是SELECT语句。有可能,你会怎么做?我下面的内容不起作用。寻找类似的东西:

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

1 个答案:

答案 0 :(得分: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