2011-07-23 9 views
0

salut je fais une procédure stockée qui conatains un curseur ... curseur a une requête sql dynamique .. cette requête a une valeur dynamique..qui est @ industrie .. alors j'ai mis les résultats dans un temporaire table..but le problème est quand j'exécute les résultats de la procédure ne viennent pas ...curseur dynamique dans la procédure stockée

ceci est mon stroedproc dans SQLServer

ALTER PROCEDURE GETARTISTDETAIL AS 
BEGIN 
    DECLARE @INDUSTRY VARCHAR(40) 
    DECLARE @ID INT 
    DECLARE @SQL1 VARCHAR(1000) 
    DECLARE @SQL VARCHAR(1000) 
    SET @INDUSTRY='''BollyWood'',''TollyWood'',''HollyWood''' 
CREATE TABLE #TEMPTBL([NAME] VARCHAR(20),[AGE] INT ,[MAILID] VARCHAR(20)) 
    --SET @SQL='SELECT ARTISTID FROM ARTIST WHERE INDUSTRY IN ('[email protected]+')' 
    DECLARE TEMPCRS CURSOR LOCAL SCROLL STATIC FOR SELECT ARTISTID FROM ARTIST WHERE INDUSTRY IN (@INDUSTRY) 
    --PRINT @SQL 
    --exec (@SQL) 
    OPEN TEMPCRS 
    FETCH NEXT FROM TEMPCRS INTO @ID 
    WHILE @@FETCH_STATUS=0 
    BEGIN 
    INSERT INTO #TEMPTBL SELECT [NAME],[AGE],[MAILID] FROM ARTIST WHERE [email protected] 
    FETCH NEXT FROM TEMPCRS INTO @ID 
    END 
    CLOSE TEMPCRS 
    DEALLOCATE TEMPCRS 
    SELECT * FROM #TEMPTBL 
    DROP TABLE #TEMPTBL 
END 
+0

Pourquoi sur ea est-ce que tu utilises un curseur pour faire ça? Autre que l'instruction dynamique IN, il s'agit d'instructions SELECT simples. – LittleBobbyTables

Répondre

2

Vous n'avez pas besoin d'un curseur pour ce faire, il suffit d'utiliser une sous-requête:

DECLARE @INDUSTRY VARCHAR(40) 
DECLARE @SQL VARCHAR(1000) 

CREATE TABLE #TEMPTBL([NAME] VARCHAR(20),[AGE] INT ,[MAILID] VARCHAR(20)) 

SET @INDUSTRY='''BollyWood'',''TollyWood'',''HollyWood''' 

SET @SQL='INSERT INTO #TEMPTBL SELECT [NAME],[AGE],[MAILID] 
      FROM ARTIST WHERE ARTISTID IN (
      SELECT ARTISTID FROM ARTIST WHERE INDUSTRY IN ('[email protected]+') 
     )' 

EXEC (@SQL) 

SELECT * FROM #TEMPTBL 
DROP TABLE #TEMPTBL 
Questions connexes