今天在技術群裡了解到output
這個神奇的東東,於是查資料了解了一下:
output
子句的基本原理是很簡單的——它返回由每個insert
、update
或delete
命令所影響的記錄行。output
可以在客戶端應用程式中返回這些記錄行,然後將它們插入到乙個持久的或臨時的表中,也可以將記錄插入到乙個表變數中。它的用法就是直接將output
子句附到任何乙個insert/update/delete
語句後。
output
子句中可以引用inserted
或deleted
虛擬表,這取決於是否想要在資料修改前(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=1
的name
修改前的資料:
返回插入的資料: 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...