2013-06-24 56 views
0

我想在行中插入一行,如果它還不存在。我有以下的代碼,直接執行:當我將其更改爲一個paramtered方法逐年然而如果DB2插入行不存在,那麼參數值爲

insert into MyTable (Column1, Column2, Year, Code, Id, UPDATE_IDENT) 
select 'Default', 'Default', 2014, '', 0, 0 
from sysibm.sysdummy1 
WHERE NOT EXISTS (SELECT * FROM MyTable 
WHERE Column1 = 'c1' 
AND Column2 = 'c2' 
AND Year = 2014) 

insert into MyTable (Column1, Column2, Year, Code, Id, UPDATE_IDENT) 
select 'Default', 'Default', @year, '', 0, 0 
from sysibm.sysdummy1 
WHERE NOT EXISTS (SELECT * FROM MyTable 
WHERE Column1 = 'c1' 
AND Column2 = 'c2' 
AND Year = @year) 

在沒有成功的原子部分與聲明的變量也試過:

BEGIN ATOMIC 
DECLARE varJaar INTEGER; 
SET varYear = @year; 
insert into MyTable (Column1, Column2, Year, Code, Id, UPDATE_IDENT) 
select 'Default', 'Default', varYear , '', 0, 0 
from sysibm.sysdummy1 
WHERE NOT EXISTS (SELECT * FROM MyTable 
WHERE Column1 = 'c1' 
AND Column2 = 'c2' 
AND Year = varYear) 
END; 

我無法執行此操作,因爲我無法在選擇部分中使用參數。試圖將@year修改爲@年份爲Year,但仍然沒有成功。

有沒有辦法我可以聲明一個臨時變量或什麼東西在我的選擇部分使用這個參數?

回答

0

最終通過創建臨時表來解決這個問題。 變量暫時存儲。該表應自動清除,但我仍然在try-catch塊中執行drop table命令,然後觸發我的方法:

Try 
    Dim adapter As New DataAdapter() 
    Dim commandText As String = "drop table QTEMP.tempVariable" 
    Dim command As DbCommand = adapter.CreateDbCommand(commandText) 

    adapter.ExecuteNonQuery(command) 

Catch notHandledEx As Exception 
End Try 

create table #tempVariable (year int); 
insert into #tempVariable values(@Year); 

insert into MyTable (Column1, Column2, Year, Code, Id, UPDATE_IDENT) 
select 'Default', 'Default', (select max(year) from #tempVariable), '', 0, 0 
from sysibm.sysdummy1 
WHERE NOT EXISTS (SELECT * FROM MyTable 
WHERE Column1 = 'c1' 
AND Column2 = 'c2' 
AND Year = @Year)