Inserted和Deleted sql
2010-02-04 16:33
337 查看
我们先来复习下这两个表:
Inserted和Deleted这两个表是逻辑表,并且这两个表是由系统管理的,存储在内存中,不是存储在数据库中,因此,不允许用户直接对其
修改。
这两个表的结构与被该触发器作用的表在相同的表结构。这两个表是动态驻留在内存中的,当触发器工作完成,它们也被删除。
接下来,看看我们的事例,其实使用起来很简单,但也很实用。他除了用上面的两张表外,还使用了output参数。
创建表:
代码
IF
EXISTS
(
SELECT
*
FROM
sys.objects
WHERE
object_id
=
OBJECT_ID
(N
'
[TestTB]
'
)
AND
type
in
(N
'
U
'
))
DROP
TABLE
TestTB
CREATE
TABLE
TestTB(
[
id
]
[
int
]
IDENTITY
(
1
,
1
)
PRIMARY
KEY
NOT
NULL
,
Province
[
varchar
]
(
50
)
NULL
,
City
[
varchar
]
(
50
)
NULL
)
1、插入数据,并返回插入的数据:
INSERT
INTO
TestTB(Province,City)
output inserted.Province,
inserted.City
VALUES
(
'
广东
'
,
'
深圳
'
)
返回的结果:
2、同理,删除数据也是一样的,只不过是使用deleted表罢了。
delete
from
TestTB
output deleted.
*
where
id
=
1
返回结果:
3、两个结合一起:返回更新前和更新后的数据:
UPDATE
TestTB
SET
Province
=
'
湖南
'
,City
=
'
郴州
'
OUTPUT
'
我来自(更新前)
'
+
DELETED.Province
+
DELETED.City
as
[
Before
]
,
'
我来自(更新后)
'
+
Inserted.Province
+
Inserted.City
as
[
After
]
WHERE
id
=
1
返回结果:
4、还可以将返回的结果保存在表变量中,这在删除数据,并把删除的数据插入到历史表时很实用
DECLARE
@tempTable
TABLE
(
id
int
,
Province
varchar
(
50
),
City
varchar
(
50
)
)
DELETE
FROM
TestTB OUTPUT deleted.
*
INTO
@tempTable
WHERE
id
>
4
SELECT
*
FROM
@tempTable
Inserted和Deleted这两个表是逻辑表,并且这两个表是由系统管理的,存储在内存中,不是存储在数据库中,因此,不允许用户直接对其
修改。
这两个表的结构与被该触发器作用的表在相同的表结构。这两个表是动态驻留在内存中的,当触发器工作完成,它们也被删除。
接下来,看看我们的事例,其实使用起来很简单,但也很实用。他除了用上面的两张表外,还使用了output参数。
创建表:
代码
IF
EXISTS
(
SELECT
*
FROM
sys.objects
WHERE
object_id
=
OBJECT_ID
(N
'
[TestTB]
'
)
AND
type
in
(N
'
U
'
))
DROP
TABLE
TestTB
CREATE
TABLE
TestTB(
[
id
]
[
int
]
IDENTITY
(
1
,
1
)
PRIMARY
KEY
NOT
NULL
,
Province
[
varchar
]
(
50
)
NULL
,
City
[
varchar
]
(
50
)
NULL
)
1、插入数据,并返回插入的数据:
INSERT
INTO
TestTB(Province,City)
output inserted.Province,
inserted.City
VALUES
(
'
广东
'
,
'
深圳
'
)
返回的结果:
2、同理,删除数据也是一样的,只不过是使用deleted表罢了。
delete
from
TestTB
output deleted.
*
where
id
=
1
返回结果:
3、两个结合一起:返回更新前和更新后的数据:
UPDATE
TestTB
SET
Province
=
'
湖南
'
,City
=
'
郴州
'
OUTPUT
'
我来自(更新前)
'
+
DELETED.Province
+
DELETED.City
as
[
Before
]
,
'
我来自(更新后)
'
+
Inserted.Province
+
Inserted.City
as
[
After
]
WHERE
id
=
1
返回结果:
4、还可以将返回的结果保存在表变量中,这在删除数据,并把删除的数据插入到历史表时很实用
DECLARE
@tempTable
TABLE
(
id
int
,
Province
varchar
(
50
),
City
varchar
(
50
)
)
DELETE
FROM
TestTB OUTPUT deleted.
*
INTO
@tempTable
WHERE
id
>
4
SELECT
*
FROM
@tempTable
相关文章推荐
- SQL 临时表INSERTED和DELETED
- Inserted和Deleted sql
- SQL 中的两个逻辑表,inserted和deleted表
- sqlserver在触发器中执行动态sql用到inserted(deleted)表
- sqlserver在触发器中执行动态sql用到inserted(deleted)表
- 【SQL触发器】Inserted和deleted详解
- 触发器deleted 表和 inserted 表详解
- deleted 和 inserted 是逻辑(概念)表。
- 实战 SQL Server 2008 数据库误删除数据的恢复 (转载至dudu http://www.cnblogs.com/dudu/archive/2011/10/15/sql_server_recover_deleted_records.html)
- DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2_SKIPINSERTED的使用
- 创建触发器时提示错误信息:不能在 'inserted' 表和 'deleted' 表中使用 text、ntext 或 image 列
- 不能在 'inserted' 表和 'deleted' 表中使用 text、ntext 或 image 列。
- deleted和inserted是逻辑(概念)表。
- Inserted表和Deleted表
- sql触发器deleted 表和 inserted 表简介
- 触发器中的inserted和deleted、update
- EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发表
- Trigger的用法及Inserted Deleted的作用
- Trigger的用法及Inserted Deleted的作用
- 触发器中虚拟表 inserted 和 deleted