Sql server 如何在SQL SERVER中自动递增合并表不匹配的列?

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

我将使用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 #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