Sql server 如何在SQL SERVER中自动递增合并表不匹配的列?
我将使用SQL Server 2014中的合并表在目标表中插入行。 我想在目标表中自动增加ID列Sql server 如何在SQL SERVER中自动递增合并表不匹配的列?,sql-server,Sql Server,我将使用SQL Server 2014中的合并表在目标表中插入行。 我想在目标表中自动增加ID列 CREATE TABLE #targetTable(id int,name varchar(50)) CREATE TABLE #sourceTable(id int,name varchar(50)) INSERT INTO #sourceTable values(1,'John'); INSERT INTO #sourceTable values(1,'Albrt'); INSERT INTO
CREATE TABLE #targetTable(id int,name varchar(50))
CREATE TABLE #sourceTable(id int,name varchar(50))
INSERT INTO #sourceTable values(1,'John');
INSERT INTO #sourceTable values(1,'Albrt');
INSERT INTO #sourceTable values(1,'Roy');
MERGE #targetTable AS [target]
USING #sourceTable AS [source]
ON [target].id = [source].id
WHEN NOT MATCHED THEN
INSERT (id, Name)
VALUES ((select isnull(max(id),1) + 1 from #sourceTable), source.Name);
select * from #targetTable as T
drop table #targetTable
drop table #sourceTable
我曾经尝试过像从#sourceTable
中选择isnull(max(id),1)+1这样的操作,但是它为所有列提供了相同的id。这一个将返回低于输出
2 John
2 Albrt
2 Roy
输出需要像
2 John
3 Albrt
4 Roy
对于预期的输出,我必须做哪些更改?#我没有更改表列的权限。id字段甚至不是主键。好的,我明白了,您只是在测试用例中使用临时表。那么第()行怎么样。编辑以显示。如果要从id值开始,可以将其更改为id+行号()。
CREATE TABLE #targetTable(id int, name varchar(50))
CREATE TABLE #sourceTable(id int,name varchar(50))
INSERT INTO #sourceTable values(1,'John');
INSERT INTO #sourceTable values(1,'Albrt');
INSERT INTO #sourceTable values(1,'Roy');
MERGE #targetTable AS [target]
USING
(
select id,
name,
ROW_NUMBER() OVER(ORDER BY id) as rnk
from #sourceTable
) AS [source]
ON [target].id = [source].id
WHEN NOT MATCHED THEN
INSERT (id, Name)
VALUES (rnk, source.Name);
select * from #targetTable as T
drop table #targetTable
drop table #sourceTable