使用insert into values和prepared statement获取下一行增量值

时间:2016-12-08 15:39:51

标签: c# db2 prepared-statement sql-insert

我正在使用DB2数据库和C#预处理语句,如此,

sql = "INSERT INTO " + LibraryList.INV + ".LOG" +
      "(field1, field2, etc..) " +
      "VALUES(?,?,.., SELECT ROW_NUMBER() OVER(order by (select NULL) From  " 
      + LibraryList.INV + ".LOG)))"; 

所以基本上我有我正在使用的准备好的语句,然后我想使用select语句插入一个值来获取下一个增量数字..我过去使用Row_Number()来获取它但是我继续犯这样的错误。此语句产生错误:“找不到ROW_NUMBER()”。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

如果你真的想这样做,你可以这样做:

sql = string.Format("INSERT INTO {0}.LOG (id, field1, field2) values (values (ifnull((select max(id) from {0}.LOG), 0) +1, '{1}', {2})", LibraryList.INV, stringvaluefield1, numericvaluefield2);

SQL generate具有以下形式:

INSERT INTO yourlib1.Table1 (id, field1, field2) 
values (ifnull((select max(t1.id) from yourlib1.Table1 t1), 0) +1 , 'value1', 'value2') 

但这是一个坏主意。你应该在你的桌子上使用自动增量,因为如果有人试图在你的同一时间添加行,你的解决方案可能会出现并发问题。

如果要在table1中插入多行table2

sql = string.Format("INSERT INTO {0}.Table1 (id, field1, field2) select rownumber() over() + ifnull((select max(t1.id) from {0}.Table1 t1), 0) , t2.field1, t2.field3 from {0}.Table2 t2 ", LibraryList.INV);

SQL generate具有以下形式:

INSERT INTO yourlib1.Table1 (id, field1, field2) 
select rownumber() over() + ifnull((select max(t1.id) from yourlib1.Table1 t1), 0) , t2.field1, t2.field3 
from yourlib2.Table2 t2