<address id="xpjh9"><listing id="xpjh9"><meter id="xpjh9"></meter></listing></address>

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
<noframes id="xpjh9">
<noframes id="xpjh9">

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
    <form id="xpjh9"></form><address id="xpjh9"><listing id="xpjh9"><menuitem id="xpjh9"></menuitem></listing></address>

      <noframes id="xpjh9">
      VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
      SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
      當前位置:
      首頁 > 數據庫 > T-SQL >
      • sql語句大全之OUTPUT

      • 2015-01-25 00:57 來源:未知

      OUTPUTsql語句大全

      在SQL SERVER 2008之前,要想觀察INSERT,DELETE或UPDATE命令的結果,唯一的方式是在這些操作之后通過觸發器來進行。在觸發器的內部,可以看到一行在命令執行之前和執行之后的狀態。SQL SERVER 2008為INSERT,UPDATE和DELETE命令增加了一個可選項OUTPUT子句,使用戶可以捕獲到在觸發器的內部可以看到的信息。
      INSERT ,UPDATE和DELETE命令使用了OUTPUT子句自身的一個常用語法,但它的位置不同于它在命令中的位置。OUTPUT子句可以像SELECT命令那樣將結果返回給客戶或者與INTO子句一起使用以在一個表中增加行。
      OUTPUT的用途之一是獲得一個標識列的數值,這些值由INSERT命令分配給一個行。下面結合一些具體實例來說明其用法。首先,創建一個讀者信息表來存儲一些新來的讀者的信息,其表定義如下面所示:
      create table reader_info
      (
      id int IDENTITY PRIMARY KEY,
      NAME VARCHAR(20),
      GRADE INT
      )
      創建好表之后,然后使用INSERT命令為該表增加一條學生信息。INSERT命令包含一個返回數據值與其新標識的OUTPUT子句,基這個例子中,SCOPE_IDENTITY()函數用來獲得新標識,使用INSERT命令插入語句如下所示:
      insert into reader_info
      output inserted.id as [inserted id],
      INSERTED.name as [inserted name],
      INSERTED.GRADE AS [inserted grade]
      values ('王曉波',700)
      執行上述語句后,可以看到如下結果,如圖6-20所示。

      圖6-20  獲得新標識
      所有OUTPUT子句通用的語法是OUTPUT關鍵字以及用逗號分隔的列名和可選的別名,這些列可以來自INSERTED或DELETED表。INSERTED或DELETED表是邏輯上的表而非物理上的表。INSERTED表將包含被處理表中的所有列。這些列將包含改變或處理之后的值,即INSERT或UPDATE命令所影響的所有值。DELETED表將包含改變或處理之前刪除的行,即在執行DELETE或UPDATE命令之前的所有值。
      一個INSERT命令只產生一個INSERTED表,一個DELETE命令只產生一個DELETED表,但一個UPDATE命令將產生兩個表,即INSERTED表和DELETED表。
      下面看具體實例,了解UPDATE產生的這兩個表。使用UPDTAE命令更新表reader_info,如下所示:
      update reader_info
      set grade=grade-20
      OUTPUT INSERTED.id,inserted.name,
      deleted.grade as [old grade],
      inserted.grade as [new grage]
      where grade>=540
      在這個例子里,它把來自INSERTED和DELETED表中的數據列分別用來區分輸出數據中的舊值和新值。在一個UPDATE命令中,OUTPUT子句總處在SET子句之后并處在任何FROM和WHERE子句之前。執行上述UPDATE語句后,可以看到顯示結果如圖6-21所示。
       

      圖6-21  執行UPDATE語句后的結果顯示
      由OUTPUT子句返回的結果反映了OUTPUT輸出的結果是在INSERT,UPDATE和DELETE執行之后、但在任何觸發器引發之前的值。對于一個INSTAND OF觸發器而言,這個值將反映沒有執行INSTAND OF觸發器進表中應有的數據,當然此時的INSTAND OF觸發器仍舊會被引發。
      相關教程
      江苏快3 济源 | 阳江 | 琼中 | 乐山 | 广元 | 南充 | 连云港 | 澳门澳门 | 澄迈 | 固原 | 昌吉 | 酒泉 | 克孜勒苏 | 保亭 | 忻州 | 库尔勒 | 如皋 | 醴陵 | 桂林 | 梅州 | 新余 | 黔东南 | 扬州 | 武夷山 | 汕尾 | 柳州 | 兴安盟 | 白银 | 蚌埠 | 临猗 | 阿拉尔 | 临海 | 池州 | 临汾 | 益阳 | 阿克苏 | 启东 | 包头 | 广饶 | 焦作 | 嘉峪关 | 红河 | 巴彦淖尔市 | 珠海 | 毕节 | 定州 | 东莞 | 包头 | 阜阳 | 吐鲁番 | 沧州 | 保定 | 汉中 | 大兴安岭 | 随州 | 葫芦岛 | 衡水 | 宜昌 | 诸城 | 阿坝 | 安顺 | 营口 | 镇江 | 阿勒泰 | 资阳 | 桓台 | 内蒙古呼和浩特 | 盐城 | 普洱 | 吴忠 | 汝州 | 江门 | 盘锦 | 宜都 | 葫芦岛 | 吴忠 | 燕郊 | 东海 | 垦利 | 恩施 | 山西太原 | 滁州 | 山西太原 | 辽阳 | 庆阳 | 果洛 | 天水 | 乐平 | 宁波 | 海南海口 | 杞县 | 泗阳 | 神农架 | 阿里 | 安吉 | 湖州 | 包头 | 海宁 | 天水 | 乐山 | 邹平 | 姜堰 | 改则 | 安吉 | 揭阳 | 黑龙江哈尔滨 | 丽江 | 威海 | 吉林 | 林芝 | 绵阳 | 包头 | 内江 |