Mat*_*eri 1 sql database sql-server
假设我有一个临时表,其中包含一些列,其中一个列专门用于插入发票的标识列,其他列用于插入发票数据本身。如下表:
CREATE TABLE #InvoiceItems
(
RowNumber INT, -- Used for inserting new invoice
SaleID INT, -- Used for inserting new invoice
BuyerID INT, -- Used for inserting new invoice
InvoiceID INT -- Intended for PK of the invoice added after inserting it
);
Run Code Online (Sandbox Code Playgroud)
我使用类似以下内容将数据插入发票表
INSERT INTO [Invoice]
SELECT [col1, ...]
FROM #InvoiceItems
Run Code Online (Sandbox Code Playgroud)
如何InvoiceID在使用临时表将表数据插入发票表时填充列?我了解SCOPE_IDENTITY()函数,但它仅返回最后插入的 PK,这并不真正适合我的需要。
我也可以使用 awhile来一一执行此操作,但由于我计划插入的数据量非常大,我觉得它不会是最优化的选项。
感谢您提前的答复。
要从子句中获取多个IDENTITY值,INSERT INTO SELECT FROM OUTPUT可以使用:
-- temp table
CREATE TABLE #temp(col VARCHAR(100));
INSERT INTO #temp(col) VALUES ('A'), ('B'), ('C');
--target table
CREATE TABLE tab(
id INT IDENTITY,
col VARCHAR(100)
);
Run Code Online (Sandbox Code Playgroud)
主要插入:
INSERT INTO tab(col)
OUTPUT inserted.id, inserted.col
SELECT col
FROM #temp;
Run Code Online (Sandbox Code Playgroud)
输出也可以使用以下命令插入到另一个表中OUTPUT INTO:
CREATE TABLE #temp_identity(id INT);
INSERT INTO tab(col)
OUTPUT inserted.id
INTO #temp_identity
SELECT col
FROM #temp;
SELECT * FROM #temp_identity;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |