SQL 服务器如果不存在则插入 - 无主键
SQL Server Insert If Not Exists - No Primary Key
我有 Table A
和 Table B
。
Table A
包含来自其他来源的数据。
Table B
包含从 Table A
插入的数据以及来自其他表的数据。我已经完成了从 A
到 B
的初始数据插入,但现在我要做的是从 Table A
插入 Table B
中不存在的记录每天一次。不幸的是,Table A
中没有主键或唯一标识符,这使得这很困难。
Table A
包含一个名为 file_name
的字段,其值如下所示:
this_is_a_file_name_01011980.txt
此列中可以有重复值(同一日期的多个文件)。
在 Table B
中,我创建了一个列 data_date
,它从 table a.file_name
字段中提取日期。还有一个 load_date
字段,它在插入数据时只使用 GETDATE()
。
我想我可以通过某种方式比较这些表中的日期来决定需要插入什么。例如:
如果来自 Table A
的文件日期(需要再次提取)大于 Table B
的 load_date
,则将这些记录插入 Table B
.
如果需要任何说明,请告诉我。
您可以使用 exists 或 except。有了这里的解释,似乎 except 会缩短这个时间。像这样。
insert tableB
select * from tableA
except
select * from tableB
我有 Table A
和 Table B
。
Table A
包含来自其他来源的数据。
Table B
包含从 Table A
插入的数据以及来自其他表的数据。我已经完成了从 A
到 B
的初始数据插入,但现在我要做的是从 Table A
插入 Table B
中不存在的记录每天一次。不幸的是,Table A
中没有主键或唯一标识符,这使得这很困难。
Table A
包含一个名为 file_name
的字段,其值如下所示:
this_is_a_file_name_01011980.txt
此列中可以有重复值(同一日期的多个文件)。
在 Table B
中,我创建了一个列 data_date
,它从 table a.file_name
字段中提取日期。还有一个 load_date
字段,它在插入数据时只使用 GETDATE()
。
我想我可以通过某种方式比较这些表中的日期来决定需要插入什么。例如:
如果来自 Table A
的文件日期(需要再次提取)大于 Table B
的 load_date
,则将这些记录插入 Table B
.
如果需要任何说明,请告诉我。
您可以使用 exists 或 except。有了这里的解释,似乎 except 会缩短这个时间。像这样。
insert tableB
select * from tableA
except
select * from tableB