sql - 如何在 T-SQL 中插入另一个表中的列?

标签 sql sql-server tsql ssms

我有两个表需要合并而不创建新的 View /表。基本上,我只需要将一列添加到从另一个表中获取的现有表中。

table1 看起来像这样:
enter image description here

table2 看起来像这样:
enter image description here

我需要一个看起来像 table2 但有一个附加列的表:programs_total。如果第一列中没有这样的 id,我希望第二列有 NULL。在此示例中,我希望 id=72_200 的原始数据在 programs_total 列中具有 NULL

我尝试了以下脚本:

-- adding a new column 
ALTER TABLE table2
ADD programs_total BIGINT NULL;

-- inserting new data
INSERT INTO table2 (programs_total)
SELECT programs_total
FROM table1

但它会产生以下错误:

Msg 515, Level 16, State 2, Line 4
Cannot insert the value NULL into column 'id', table 'stb.dbo.table2'; column does not allow nulls. INSERT fails.
The statement has been terminated.

我想它会尝试插入三个新行,而不是将列与现有的列连接起来。我如何告诉它将该列连接到现有行?

或者我做错了什么?

最佳答案

看起来像您真正想要的UPDATE:

UPDATE t2
SET t2.total_programs = t1.total_programs
FROM dbo.table2 t2
     JOIN dbo.table1 t1 ON t2.id = t1.id;

但是,如果 table1 中的 id 值未出现在 table2 中,并且您想插入这些值进入 table2 以及你需要一个 MERGE:

MERGE dbo.Table2 AS T2
USING dbo.TAble1 AS T1 ON T2.id = T1.id
WHEN MATCHED THEN
    UPDATE 
    SET total_programs = t1.total_programs
WHEN NOT MATCHED THEN
    INSERT (id,total_programs)
    VALUES(T1.id,T1.total_programs);

或者你可以把它写成一个 Upsert,如下所示:

UPDATE t2
SET t2.total_programs = t1.total_programs
FROM dbo.table2 t2
     JOIN dbo.table1 t1 ON t2.id = t1.id;

INSERT INTO dbo.Table2(id,total_programs)
SELECT t1.id,
       t1.total_programs
FROM dbo.Table1 t1
WHERE NOT EXISTS (SELECT 1
                  FROM dbo.Table2 t2
                  WHERE t2.id = t1.id);

关于sql - 如何在 T-SQL 中插入另一个表中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67971276/

相关文章:

sql-server - 使用 T-SQL 粉碎 XML - 从组内提取行值的正确语法是什么?

sql - 如何为 SQL Server 数据库中的所有表创建触发器

mysql - 在数据库中存储游戏玩家进度 I​​D - MySQL 中的逗号分隔数据与规范化 MySQL 记录(关于服务器性能)

mysql - MySQL 中外连接逻辑表错误的 key 文件不正确

.net - dotnet ef 更新数据库 : A connection was successfully established with the server, 但随后在登录过程中发生错误

mysql - 使用 setMaxResults 和 native 查询创建的 SQL 查询不正确

sql - T-SQL 脚本当前用户数据库权限

c# - 返回被 UPDATE TOP 1 修改的记录

php - 初学者需要 sql 和 php 方面的帮助

java - 包含撇号 php 的文本