Tsql 声明传递变量名的SQL游标
我想取消对Tsql游标的存储,但要向其传递一个字符串变量,而不是SELECT语句。有可能吗?你会怎么做?我下面的东西不起作用。寻找类似于:Tsql 声明传递变量名的SQL游标,tsql,cursor,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
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
您必须使整个光标动态,并且必须使用
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时,请先阅读这里的内容:在执行之后,c是否会在范围内?@TonyHopkinson感谢您的提示,本地游标将无法工作,请参阅:我更改了代码。有一个名为sp_msforeachdb的未记录存储过程,您可能会发现它很有用。