我正在使用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()
”。这样做的正确方法是什么?
答案 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