Sql server 使用SQL INSERT从两个列表中插入多条记录
我有一份员工编号清单和日期清单。我想在表中为每个员工编号和日期插入一行Sql server 使用SQL INSERT从两个列表中插入多条记录,sql-server,Sql Server,我有一份员工编号清单和日期清单。我想在表中为每个员工编号和日期插入一行 皇帝(1,2,3,4,5) 日期(‘2020-04-06’、‘2020-04-07’、‘2020-04-08’、‘2020-04-09’、‘2020-04-10’) 我可以使用: BEGIN TRAN SET XACT_ABORT ON INSERT INTO TABLE1 (EMPNUM, DATE) VALUES (1, '2020-04-06') (1, '2020-04-07') e
- 皇帝(1,2,3,4,5)
- 日期(‘2020-04-06’、‘2020-04-07’、‘2020-04-08’、‘2020-04-09’、‘2020-04-10’)
BEGIN TRAN
SET XACT_ABORT ON
INSERT INTO TABLE1 (EMPNUM, DATE)
VALUES (1, '2020-04-06')
(1, '2020-04-07')
etc.
但这需要手动创建大量记录
有没有更简单的方法来实现我的目标?听起来像是交叉连接,例如
with empnums as
(
select cast(value as int) empnum from openjson('[1,2,3,4,5,6]')
), dates as
(
select cast(value as date) date from openjson('["20200406","20200407","20200408","20200409"]')
)
select *
from empnums
cross join dates
您可以将
交叉联接与值一起使用:
insert into table1 (empnum, date)
select e.empnum, d.dates
from (values(1), (2), (3), (4), (5)
) e(empnum) cross join
(values ('2020-04-06'), ('2020-04-07'), ('2020-04-08'), ('2020-04-09')
) d(dates);
尝试基于上述内容进行交叉联接,但出现错误,“e”的列数超过了列列表中指定的列数。@Kevin_H。SELECT
语句有问题,它包含的列比INSERT-INTO
语句中定义的列多。我调整了代码,它工作得很好,非常感谢。