簡體   English   中英

將源列添加到 output 子句並插入到 select

[英]Add source columns to output clause with insert into select

我的 c# 代碼調用存儲過程並將 tvp 作為參數傳遞給 storerd 過程。 我需要將接收到的數據插入到幾個數據庫表中。

TVP schema:
TVP_ID int PRIMARY KEY IDENTITY, Col1 int, Col2 int, Col3 int.

首先,我需要將 Col1 插入到 Table1:

Table1 schema:
Table1_ID int PRIMARY KEY IDENTITY, Col1 int

然后,我需要將所有列插入到 Table2 中。

Table2 schema:
TVP_ID int, Col1 int, Col2 int, Col3 int, Table1_ID int

其中 TVP_ID 和 Table1_ID 是 TVP 和 Table1 表的主鍵。

我怎樣才能做到這一點?

謝謝!

編輯:我的問題是,當我有 Table1 時(在將數據插入 col1 之后),TVP 和 Table1 之間的連接不再存在。 TVP的Key是TVP_ID,Table1的Key是Table1_ID,我失去了它們之間的聯系。

我插入多行,所以一旦我將多行添加到 Table1,我如何才能將多行插入到 table2?

當您插入 MSSQL 時,所有插入的數據都會被臨時存儲。 您可以使用 OUTPUT 子句訪問數據。 在此 output 子句中,您有兩種訪問數據的方法。 已插入。*(或指定的列)和已刪除。 . 通過這種方式,您可以捕獲插入或刪除的相同數據,並將其路由到另一個表。 同一條Insert語句,只能用OUTPUT插入。 , 僅刪除 OUTPUT deleted.* 並同時更新兩者(更新畢竟只是刪除,並且插入同一行並更改了 1 個或多個單元格)

語法如下:

Insert Into table1(table1_ID, col1)
Output inserted.tabl1_id, inserted.col1 into table2
from .... (or Values()? )

插入后,您可以執行 OUTPUT inserted.col1、inserted.col2 等 INTO table2。 對於更新和刪除,您可以使用相同的語法(OUTPUT deleted.* into <2nd table>)

如果您必須將數據復制到多個表,您也可以將其存儲在表變量或臨時表中。 請注意,您只能將它存儲在一個表中,即使您知道它只會返回一行。 這是因為雖然您可能知道它總是會返回 1 行,但 SQL 不會也不會允許這成為一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM