[SQL SERVER][TSQL]如何在Store Precedure 同時使用 Cursor 和動態SQL

[SQL SERVER][TSQL]如何在Store Precedure 同時使用 Cursor 和動態SQL

網友問題,自己紀錄備忘使用。

 

一個Cursor只能接受一句statement,如果你真的需要動態建立SQL,

那麼請你也把定義 Cursor 的語法 和動態SQL一起處理,下面我做個簡單示範。

 

Declare @FunIn nvarchar(10),
@Mycost int,
@Value nvarchar(30),
@Total numeric(20,3),
@MyQuery nvarchar(500),
@Mywhere nvarchar(100),
@Sqlstatement nvarchar(max); 
if @FunIn='001'  
    set @Value='政策';
else
     set @Value='執行';    
    
set @Mywhere=' where Case_Kind='''+@Value+'''';    
set @MyQuery = 'SELECT top 10 Total_Trouble_Count FROM dbo.REPORT_STATISTICS'+@Mywhere ;
--定義 Cursor 的語法 和動態SQL一起處理
set @Sqlstatement = 'Declare MyCursor CURSOR FAST_FORWARD FOR ' +@MyQuery
    exec sp_executesql @Sqlstatement
    OPEN MyCursor
  FETCH NEXT FROM MyCursor INTO @Mycost
            WHILE @@FETCH_STATUS = 0 
                BEGIN                 
                    set @Total =(@Mycost+1)*0.05;
                    print @Total                                                 
                    FETCH NEXT FROM MyCursor INTO @Mycost
                END
    CLOSE MyCursor
DEALLOCATE MyCursor 

 

 

 

參考

DECLARE CURSOR (Transact-SQL)