SQL Server 的示例表。
- 主要记录(
id, record
) - 辅助记录(
mainRecords_id, record
) - 源记录(
record1, record2
)
MainRecords.id
是一个自增主标识键。
是否可以在单个语句中同时选择SourceRecords
并插入MainRecords
和AuxRecords
,这样MainRecords.record = record1
,AuxRecords.record = record2
和all ?AuxRecords.mainRecords_id = MainRecords.id
编辑:
根据下面的提示,我尝试了这个...
DECLARE @MainRecords table(id int PRIMARY KEY IDENTITY, record varchar(5))
DECLARE @AuxRecords table(mainRecords_id int, record varchar(5))
DECLARE @SourceRecords table(record1 varchar(5), record2 varchar(5))
INSERT @SourceRecords VALUES ('a', 'a')
INSERT @SourceRecords VALUES ('a', 'b')
INSERT @SourceRecords VALUES ('a', 'c')
INSERT @SourceRecords VALUES ('b', 'a')
INSERT @SourceRecords VALUES ('b', 'b')
INSERT @SourceRecords VALUES ('b', 'c')
INSERT @SourceRecords VALUES ('c', 'a')
INSERT @SourceRecords VALUES ('c', 'b')
INSERT @SourceRecords VALUES ('c', 'c')
INSERT INTO @MainRecords (record)
OUTPUT inserted.id, @SourceRecords.record2
INTO @AuxRecords (mainRecords_id, record)
SELECT record1 FROM @SourceRecords
select * from @MainRecords
select * from @AuxRecords
但不幸的是得到错误:
Msg 137, Level 16, State 1, Line 16
Must declare the scalar variable "@SourceRecords".
如果我将这些表类型变量更改为真实表,则会出现错误:
Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "SourceRecords.record2" could not be bound.
下面工作正常,但显然它不是一个完整的解决方案。我只是展示它来证明我的语法是正确的。
INSERT INTO @MainRecords (record)
OUTPUT inserted.id --, @SourceRecords.record2
INTO @AuxRecords (mainRecords_id) --, record)
SELECT record1 FROM @SourceRecords
所以......除非我缺少一些技巧,否则似乎OUTPUT
是解决这个问题的死胡同。
使用触发器创建视图或空表的其他建议不是解决问题的“单一语句”。此外,它们增加了模糊性,而添加一些额外的列和使用存储过程同样复杂,但更加明显和直接。