存储过程中的动态游标

本文关键字:动态 游标 过程中 存储过程 存储 | 更新日期: 2023-09-27 18:03:07

嗨,我正在做一个包含游标的存储过程…游标有一个动态SQL查询。这个查询的动态值是@industry..然后我把结果放在一个临时表中,但问题是,当我执行过程时,结果没有来…

这是我的stroedproc在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 ('+@INDUSTRY+')' 
    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 ARTISTID=@ID
    FETCH NEXT FROM TEMPCRS INTO  @ID
    END
    CLOSE TEMPCRS
    DEALLOCATE TEMPCRS
    SELECT * FROM #TEMPTBL
    DROP TABLE #TEMPTBL
END

存储过程中的动态游标

您不需要游标来完成此操作,只需使用子查询:

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 ('+@INDUSTRY+')
         )' 
EXEC (@SQL)
SELECT * FROM #TEMPTBL
DROP TABLE #TEMPTBL