sql-server - 如何在 SQL SERVER 中自动增加合并表不匹配大小写的列?

标签 sql-server

我将使用 SQL Server 2014 中的 MERGE 表在目标表中插入行。 我想在目标表中自动增量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

我曾尝试这样做 select isnull(max(id),1) + 1 from #sourceTable 但它为所有列提供了相同的 id。这将返回以下输出

2   John
2   Albrt
2   Roy

需要输出,例如

2   John
3   Albrt
4   Roy

我必须对预期输出进行哪些更改?

最佳答案

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

关于sql-server - 如何在 SQL SERVER 中自动增加合并表不匹配大小写的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36217729/

相关文章:

sql-server - 访问 SQL Azure 数据库时无法进入 SSMS 2012 中的设计 View

sql-server - 创建 SQL Server ODBC 数据源的最简单、最易于维护的方法是什么?

sql - 将列中的所有值相加

sql-server - 如何测量在线 T-SQL 查询的成本?

sql - 表上的额外列与磁盘上的大小

sql-server - 如何使用具有托管标识的自动化帐户 Runbook 运行 Azure SQL Server 存储过程?

sql - 是否可以从 Sql Server 返回空行?

c# - "Exception thrown: ' System.FormatException ' in Microsoft.SqlServer.Types.dll "在 ASP.NET 控制台应用程序 C#

sql - 字段值必须唯一,除非为 NULL

多列的 SQL 条件约束是唯一的