我试着一个接一个地做两个插页,比如:
INSERT INTO tbl_tours (TimeFrom)
OUTPUT inserted.tourId, DispatchingId, TimeFrom, TimeTo INTO tbl_tourData (tour_fk, dispatchId, timeFrom, timeTo)
SELECT TimeFrom
FROM @tmpTable
SELECT * FROM tbl_tours
SELECT * FROM tbl_tourData
但我有个错误:
消息207级别16状态1行13
列名“dispatchingid”无效。
消息207级别16状态1行13
列名“timefrom”无效。
消息207级别16状态1行13
列名“timeto”无效。
您可以在这里查看完整的代码:https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=c10f9886bcfb709503007f18b24eabfd
如何组合这些插入?
2条答案
按热度按时间disbfnqx1#
这个
output
子句只能引用插入的列。所以这是可行的:这是修改后的db<>小提琴。
如果你想要更多的信息,你需要加入到另一个来源。
vbopmzt12#
当你做一个
insert ... output
,则“输出”部分只能输出“插入”部分插入的内容。不能引用“插入”表中的数据。你知道吗
insert into tbl_tours(TimeFrom)
. 所以您只需要插入一个列—timefrom列,而tour\u id列将自动插入,所以这也是可用的。但是您尝试在输出列表中使用4列。这些额外的两列是从哪里来的?一步到位的方法是使用
merge
语句,它可以从“inserting”源而不仅仅是“inserted”表中获取数据。既然你知道你总是想做一个插入,你可以加入on 1 = 0
:我应该补充一句:这只可能是因为您实际上没有从中定义外键
tbl_tourData
至tbl_Tours
. 你可能真的打算用你的列名来命名。output子句不能输出到带有外键(或带有外键的主键)的表中,因此如果您决定实际创建该外键,这种方法将根本不起作用。你得分两步做。或者根据gordon的答案(insert和join),或者通过创建一个与tbl_tourData
,使用merge
,然后将第二个temp表转储到tbl_tourData
.