0

まだ存在しない場合は、テーブルに行を挿入したい。直接実行する次のコードがあります。

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 as Year に変更しようとしましたが、まだ成功しません。

選択部分でこのパラメーターを使用するために一時変数または何かを宣言できる方法はありますか?

4

1 に答える 1

0

一時テーブルを作成することで、最終的にこれを解決しました。変数は一時的に格納されます。このテーブルは自動的にクリアする必要がありますが、メソッドをトリガーする前に、try-catch ブロックでドロップ テーブル コマンドを実行します。

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)
于 2013-06-24T12:04:32.853 に答える