我有两个表需要合并而不创建新的 View /表。基本上,我只需要将一列添加到从另一个表中获取的现有表中。
我需要一个看起来像 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/