光标声明错误

时间:2010-01-02 10:35:28

标签: sql-server

set @SQL=N' select  @minTableId   = MIN(id)  from ' + @AcDB + '.dbo.vTblOfRollNo '

Declare Cursor For
EXEC SP_EXECUTESQL @SQL 

如果我已经在上面的查询中声明了所有变量,但在上面声明了游标声明 查询显示ERROR。 什么是解决方案?

2 个答案:

答案 0 :(得分:2)

为了在动态SQL上执行游标,必须将动态sql的输出放入临时表,然后将光标放在临时表上,如下所示:

DECLARE @TableName NVARCHAR(100)
DECLARE @SQL NVARCHAR(1000)
CREATE TABLE #TempTABLE(email NVARCHAR(200))

SET @TableName='Users'
SELECT @SQL='INSERT INTO #TempTable SELECT email FROM ' + @TableName 
EXEC (@SQL)

DECLARE MyCursor CURSOR FOR SELECT * FROM #TempTable
OPEN MyCursor
DECLARE @Email NVARCHAR(200)
FETCH NEXT FROM MyCursor INTO @Email

WHILE @@FETCH_STATUS = 0
BEGIN
 PRINT 'Email = ' + @Email
 FETCH NEXT FROM MyCursor INTO @Email
END

CLOSE MyCursor
DEALLOCATE MyCursor
DROP TABLE #TempTABLE

答案 1 :(得分:0)

我认为你不需要这个

的光标

DECLARE @AcDB VARCHAR(10),
        @Sql NVARCHAR(MAX)

set @SQL=N' select MIN(id)  from ' + @AcDB + '.dbo.vTblOfRollNo '

DECLARE @Temp TABLE(
        MinID INT
)
INSERT INTO @Temp EXEC SP_EXECUTESQL @SQL 

DECLARE @minTableId INT
SELECT TOP 1 @minTableId = MinID FROM @Temp

SELECT @minTableId

编辑:此处还有实际的CURSOR文档

DECLARE CURSOR (Transact-SQL)