zoukankan      html  css  js  c++  java
  • sql server中带有output的DML

    OUTPUT是SQL SERVER2005的新特性.可以从数据修改语句中返回输出.可以看作是"返回结果的DML".INSERT,DELETE,UPDATE均支持OUTPUT子句.在OUTPUT子句中,可以引用特殊表inserted和deleted.使用inserted和deleted表与在触发器中使用的非常相似. 

    在INSERT,DELETE,UPDATE中OUTPUT的区别 

    1.对于INSERT,可以引用inserted表以查询新行的属性.

    2.对于DELETE,可以引用deleted表以查询旧行的属性.

    3.对于UPDATE,使用deleted表查询被更新行在更改前的属性,用inserted表标识被更新行在更改后的值.  

    输出方式: 

    1.可以输出给调用方(客户端应用程序)

    2.输出给表

    3.两者皆可. 

    应用案例:

    -->Title:Generating test data

    -->Author:wufeng4552

    -->Date :2009-10-07 15:16:26

    if object_id('ta')is not null drop table ta

    go

    create table ta(ID int identity,[name] varchar(10))

    insert ta([name]) select 'a' union all

                      select 'b' union all

                      select 'c' union all

                      select 'd' union all

                      select 'e' union all

                      select 'f' union all

                      select 'g'

    if object_id('tb')is not null drop table tb

    go

    create table tb(ID int identity,[name] varchar(10))

    insert tb([name]) select 'a' union all

                      select 'b' union all

                      select 'c'

    --INSERT 陳述式來使用OUTPUT INTO

    insert tb output

    inserted.id,

    inserted.[name]

    select [name]

    from ta where not exists(select 1 from tb where [name]=ta.[name])

    /*

    id          name

    ----------- ----------

    4           d

    5           e

    6           f

    7           g

    */

    --刪除剛才插入的紀錄

    delete tb where [name]>'c'

    --储存此结 ªG集保存到一个 ªí值变 ¶q中

    declare @t table(ID int,[name] varchar(10))

    insert tb output

    inserted.id,

    inserted.[name]into @t

    select [name] from ta where not exists(select 1 from tb where [name]=ta.[name])

    select * from @t

    /*

    ID          name

    ----------- ----------

    8           d

    9           e

    10          f

    11          g

    (4 個資料列受到影響)

    */

    --DELETE 陳述式使用OUTPUT

    delete tb output deleted.*  where id=9

    /*

    ID          name

    ----------- ----------

    9           e

    (1 個資料列受到影響)

    */

    -- UPDATE 陳述式使用OUTPUT INTO

    update tb set [name]='test' output inserted.* where id=10

    /*

    ID          name

    ----------- ----------

    10          test

    (1 個資料列受到影響)

    */

    /*

    OUTPUT 子句对于在 INSERT操作之后检索标识列或计算列的值可能非常有用。
    另外OUTPUT子句也可以在UPDATE和DELETE语句中使用,从插入表或删除表中得到数值,并返回这些数值。
    以下语句中不支持 OUTPUT 子句:
    l 引用本地分区视图、分布式分区视图或远程表的 DML 语句。
    l 包含 EXECUTE 语句的 INSERT 语句。
    l 不能将 OUTPUT INTO 子句插入视图或行集函数。
    简洁的OUTPUT子句,使得向SQL Server导入数据的操作得到了极大的简化。
    */

  • 相关阅读:
    树莓派学习笔记(三)——远程调试树莓派程序(Pycharm实现)
    树莓派学习笔记(一)——系统安装与远程显示
    记 laravel 排除CSRF验证
    thinkPHP5 生成微信小程序二维码 保存在本地
    微信小程序 rich-text 富文本中图片自适应
    Laravel 中自定义 手机号和身份证号验证
    laravel Excel 导入
    微信小程序之页面跳转(tabbar跳转及页面内跳转)
    关于MySQL事务和存储引擎常见FAQ
    微信小程序点击保存图片到本地相册——踩坑
  • 原文地址:https://www.cnblogs.com/gered/p/9015246.html
Copyright © 2011-2022 走看看