2013-09-27 3 views
1

Je crée une procédure stockée dans Sql Server 2008. La procédure stockée a deux arguments qui sont les noms de colonnes d'une table. Dans la procédure stockée, j'ai utilisé une requête dynamique pour extraire les données de ces deux colonnes à l'aide de Cursor.La requête dynamique ne fonctionne pas avec le curseur dans SqlServer 2008 Procédure stockée

code:

Create PROCEDURE TestSP 
(
@firstAttribute nvarchar(max), 
@secondAttribute nvarchar(max) 
) 
AS 
DECLARE @x FLOAT 
DECLARE @y INT 
DECLARE @query nvarchar(max) 
DECLARE @cursor_query nvarchar(max) 
DECLARE @result_Cursor as cursor 

BEGIN 
SET @query = 'Select '+ @firstAttribute+','[email protected]+' from TBL_TEST_DATA_NEW' 
SET @cursor_query =' set @cursor = cursor for ' + @query +' open @cursor;' 

PRINT 'CURSOR_QUERY'[email protected]_query 

exec sys.sp_executesql 
    @cursor_query 
    ,N'@cursor cursor output' 
    ,@result_Cursor output 

FETCH NEXT FROM result_Cursor INTO @x, @y 

Mais quand j'exécute ce SP, il me donne l'erreur suivante

Msg 16916, Level 16, State 1, Procedure TestSP, Line 33 
A cursor with the name 'result_Cursor' does not exist. 

Exécuter la commande:

Exec TestSP "Column_1","Column_2" 

quelqu'un peut me dire pourquoi je suis obtenir cette erreur

S'il vous plaît aider ..

Merci

+1

Ajouter ** @ ** à votre paramètre ** result_Cursor ** et essayez de nouveau: 'FETCH NEXT @result_Cursor EN @x, @ y' –

+0

Son travail ... Merci Nadeem ...)) – Abhay

+0

Vous êtes le plus bienvenue;) –

Répondre

1

L'erreur dit que le curseur n'existe pas. Vous ne pouvez pas démarrer avec "set cursor". Le nom du curseur est également sans @.

essayer Donc, en utilisant

declare cursorNameHere cursor for SELECT ... 
open cursorNameHere 
1

@result_Cursor est une variable, il suffit de changer votre dernière ligne

FETCH NEXT FROM @result_Cursor INTO @x, @y 

voir exemple sur sql fiddle demo

+0

Ouais je l'ai fait .. Son travail après cela .. Merci ..)) – Abhay

Questions connexes