2016-11-28 61 views
0

我想使用下面的動態SQL來聲明一個遊標,但是當我嘗試在存儲過程中編譯它時,下面的SQL會失敗。有一個更好的方法嗎?謝謝。如何使用動態SQL聲明遊標?

DECLARE selrec CURSOR FOR 
SELECT DISTINCT countrycode FROM @InputTableName; 

錯誤信息: -

Must declare the table variable "@InputTableName". 

PS: - 我聲明的變量名,也是我已成立建設光標前的值。

+1

我覺得你對'動態SQL'是什麼感到困惑' – Lamak

+2

問題不在於遊標本身。這就是表*變量*僅限於本地範圍。您需要使用臨時表或更廣泛的範圍可視性。 –

回答

0

舉個例子:

declare 

    var1 varchar2(100); 
    table1 varchar2(30); 
    x  integer; 

begin 

    if x = 1 
    then 
     table1 := 'tablename1'; 

    else 
     table1 := 'tablename2' 
    end if; 

    var1 := 'select * from '||table1; 

    execute immediate var1; 

end; 
0

這對我來說工作正常(在DB與這兩個表):

declare @i1 int=5 
declare @a1 varchar(1000) 
set @a1='select top 5 * from ' 
if (@i1 > 4) 
begin 
    set @a1 = @a1 + ' [dbo].[dts_source]' 

end 
else 
begin 

    set @a1 = @a1 + ' [dbo].[dts_references]' 
end 
select @a1 
exec (@a1) 

什麼SQL機你下(

運行

立即執行

不是SQL Server語法)?