我想判断一个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
答案 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