2010-01-02 78 views
0
set @SQL=N' select @minTableId = MIN(id) from ' + @AcDB + '.dbo.vTblOfRollNo ' 

Declare Cursor For 
EXEC SP_EXECUTESQL @SQL 

的声明,如果我有宣布光标上面的查询,但声明中的所有变量上面 查询显示错误。 什么是解决方案?错误光标

+2

您确定要光标吗?如果您可以使用普通SQL执行相同的操作,则使用游标的风格很糟糕。你有没有尝试写没有游标的查询?为什么你的情况不可能? – 2010-01-02 10:41:27

+1

无论如何,你的SQL似乎只返回一个值 - 光标的点是什么? – MartW 2010-01-02 13:10:18

回答

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)

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