如果不从参数值存在DB2插入行(DB2 insert row if not exist with v

2019-11-02 05:44发布

我想插入一行到一个表,如果它不存在,但它。 我有以下的代码,直接执行:

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)

然而,当我将其更改为通过一年paramtered方法:

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为一年,但仍然没有成功。

有没有一种方法,我可以声明一个临时变量或东西在我选择部分使用此参数?

Answer 1:

通过创建一个临时表,最终解决了这个。 变量被暂时存储。 此表被自动清除,但是我触发我的方法之前仍然执行在一个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)


文章来源: DB2 insert row if not exist with value from parameter
标签: sql insert db2