Sub*_*cob 4 sql t-sql sql-server stored-procedures sql-server-2008
我有一个如下所示的查询 column1 is int anothercolumn is varchar(100)
INSERT INTO TABLE1 (column1,column2)
SELECT (MAX(column1) FROM TABLE1)+1 ,anotherColumn FROM TABLE2
Run Code Online (Sandbox Code Playgroud)
表1 查询前
column1 column2
------- -------
3 test1
4 test2
Run Code Online (Sandbox Code Playgroud)
查询后的表1
column1 column2
------- -------
3 test1
4 test2
5 anotherVal1
5 anotherVal2
5 anotherVal3
Run Code Online (Sandbox Code Playgroud)
但我想要
column1 column2
------- -------
3 test1
4 test2
5 anotherVal1
6 anotherVal2
7 anotherVal3
Run Code Online (Sandbox Code Playgroud)
如何在 SQLserver 2008 StoredProcedure 中实现这一点?我一直假设查询是迭代的,他们会检查每一行的条件。但似乎聚合函数只执行一次!
编辑 1
请也回答这个问题 仅在完成 SELECT 语句后, INSERT 就可以工作了。这就是为什么我没有得到预期的结果???我对么?
使用row_number函数为您的行提供序号
insert into Table1 (column1,column2)
select
(select max(column1) from Table1) + row_number() over (order by T2.anotherColumn),
T2.anotherColumn
from Table2 as T2
Run Code Online (Sandbox Code Playgroud)
或更安全的版本(即使您在 Table1 中没有任何行,它也可以工作):
insert into Table1 (column1,column2)
select
isnull(T1.m, 0) + row_number() over (order by T2.anotherColumn),
T2.anotherColumn
from Table2 as T2
outer apply (select max(column) as m from Table1) as T1
Run Code Online (Sandbox Code Playgroud)
我知道这个问题已经得到了回答,但也许解决方案甚至可以进一步简化?关于什么
INSERT INTO TABLE1 (column1,column2)
SELECT ISNULL((SELECT MAX(column1) FROM TABLE1),0)
+ROW_NUMBER() OVER (ORDER BY anotherColumn),
anotherColumn FROM TABLE2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32486 次 |
| 最近记录: |