Sql Server output 子句詳解

2021-09-22 20:23:12 字數 3201 閱讀 3576

今天在技術群裡了解到output這個神奇的東東,於是查資料了解了一下:

output子句的基本原理是很簡單的——它返回由每個insertupdatedelete命令所影響的記錄行。output可以在客戶端應用程式中返回這些記錄行,然後將它們插入到乙個持久的或臨時的表中,也可以將記錄插入到乙個表變數中。它的用法就是直接將output子句附到任何乙個insert/update/delete語句後。

output子句中可以引用inserteddeleted虛擬表,這取決於是否想要在資料修改前(deleted表)或修改後(inserted表)得到資料。這跟使用觸發器去修改資料的操作是很相似的。

注意:不能在乙個insert語句中引用deleted,也不能在乙個deleted語句中引用inserted,因為這些虛擬表在這兩種情況下邏輯上是沒有意義的,所以sql server不會去建立。

1:insert + output inserted案例

--建立test表 

create

table test

( id int

notnull

identity(1

,1),

name varchar(20

)not

null

)--1:insert+output測試

insert

into dbo.test

(name)

output inserted.

*values

('ken'

)

執行結果如下:

從以上執行結果可以看出output inserted.*顯示的是test表插入後的資料。

2:update + output inserted,deleted案例

update dbo.test 

set name =

'tom'

output deleted.name as 更新前,

inserted.name as 更新後

where id =

1

執行結果如下:

3:可配合into語句使用

--建立一張備份表 

create

table test_back

( id int

notnull

identity(1

,1),

name varchar(20

)not

null

)update dbo.test

set name =

'tom'

output deleted.name

into test_back

where id =

1select

*from test_back

where id =

1

執行後往test_back表中插入的是id=1name修改前的資料:

返回插入的資料: output inserted.列

insert

into t_test(province,city) output inserted.province, inserted.city values

('廣東','深圳'

)

返回刪除的資料: output deleted.列

delete

from t_test output deleted.

*where id =

2(返回刪除資料所有列)

返回更新前後的資料(前兩個的結合): output deleted.列(更新前), output inserted.列(更新後)

update t_test 

set province =

'湖南'

, city =

'郴州'

output '(更新前)'

+ deleted.province

+ deleted.city as

[更新前]

,'(更新後)'

+ inserted.province

+ inserted.city as

[更新後]

還可以將返回的結果儲存在表變數中,這在刪除資料,並把刪除的資料插入到歷史表時很實用

declare

@temptable

table

( id int

, province varchar(50

), city varchar(50

))delete

from testtb

output deleted.

*into

@temptable

where id >

4select

*from

@temptable

mysql in子句 MySQL IN 子句

可以使用 in 子句代替許多 or 條件。要想理解 in 子句,還以表 employee tbl 為例,它的所有記錄如下所示 mysql select from employee tbl id name work date daily typing pages 1 john 2007 01 24 2...

LINQ let子句 join子句

1.let子句 let子句用於在linq表示式中儲存子表示式的計算結果,既let子句建立乙個範圍變數來儲存結果,變數被建立後,不能修改或把其他表示式的結果重新賦值給它。此範圍變數可以在後續的linq中使用 static void main string args new custom var que...

Mysql ON 子句和 USING 子句

mysql 中聯接 sql 語句中,on 子句的語法格式為 table1.column name table2.column name。當模式設計對聯接表的列採用了相同的命名樣式時,就可以使用 using 語法來簡化 on 語法,格式為 using column name 例如 select f.c...