Heim  >  Artikel  >  Datenbank  >  SQL Server 2005 返回修改后的数据

SQL Server 2005 返回修改后的数据

WBOY
WBOYOriginal
2016-06-07 16:22:211410Durchsuche

今天在公司看到同事写了个SQL2005的新特性的文章,觉得很实用,在这里和大家分享下。原著作权不属于我。 这种技术主要是用到了inserted和deleted虚拟表,这两张表相信大家都很熟悉。以前我们主要是在触发器中使用。 我们先来复习下这两个表: Inserted和Dele

   今天在公司看到同事写了个SQL2005的新特性的文章,觉得很实用,在这里和大家分享下。原著作权不属于我。

  这种技术主要是用到了inserted和deleted虚拟表,这两张表相信大家都很熟悉。以前我们主要是在触发器中使用。

  我们先来复习下这两个表:

  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

  希望大家灵活应该!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn