熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows系統管理 >> 正文

UPDATE

2022-06-13   來源: Windows系統管理 

  更改表中的現有數據
  
  語法
  UPDATE
   {
   table_name WITH ( < table_hint_limited > [ n ] )
   | view_name
   | rowset_function_limited
   }
   SET
   { column_name = { expression | DEFAULT | NULL }
   | @variable = expression
   | @variable = column = expression } [ n ]
  
   { { [ FROM { < table_source > } [ n ] ]
  
   [ WHERE
   < search_condition > ] }
   |
   [ WHERE CURRENT OF
   { { [ GLOBAL ] cursor_name } | cursor_variable_name }
   ] }
   [ OPTION ( < query_hint > [ n ] ) ]
  
  < table_source > ::=
   table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ n ] ) ]
   | view_name [ [ AS ] table_alias ]
   | rowset_function [ [ AS ] table_alias ]
   | derived_table [ AS ] table_alias [ ( column_alias [ n ] ) ]
   | < joined_table >
  
  < joined_table > ::=
   < table_source > < join_type > < table_source > ON < search_condition >
   | < table_source > CROSS JOIN < table_source >
   | < joined_table >
  
  < join_type > ::=
   [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
   [ < join_hint > ]
   JOIN
  
  < table_hint_limited > ::=
   { FASTFIRSTROW
   | HOLDLOCK
   | PAGLOCK
   | READCOMMITTED
   | REPEATABLEREAD
   | ROWLOCK
   | SERIALIZABLE
   | TABLOCK
   | TABLOCKX
   | UPDLOCK
   }
  
  < table_hint > ::=
   { INDEX ( index_val [ n ] )
   | FASTFIRSTROW
   | HOLDLOCK
   | NOLOCK
   | PAGLOCK
   | READCOMMITTED
   | READPAST
   | READUNCOMMITTED
   | REPEATABLEREAD
   | ROWLOCK
   | SERIALIZABLE
   | TABLOCK
   | TABLOCKX
   | UPDLOCK
   }
  
  < query_hint > ::=
   { { HASH | ORDER } GROUP
   | { CONCAT | HASH | MERGE } UNION
   | {LOOP | MERGE | HASH } JOIN
   | FAST number_rows
   | FORCE ORDER
   | MAXDOP
   | ROBUST PLAN
   | KEEP PLAN
   }
  
  參數
  table_name
  
  需要更新的表的名稱如果該表不在當前服務器或數據庫中或不為當前用戶所有這個名稱可用鏈接服務器數據庫和所有者名稱來限定
  
  WITH ( < table_hint_limited > [ n ] )
  
  指定目標表所允許的一個或多個表提示需要有 WITH 關鍵字和圓括號不允許有 READPASTNOLOCK 和 READUNCOMMITTED
  
  view_name
  
  要更新的視圖的名稱通過 view_name 來引用的視圖必須是可更新的用 UPDATE 語句進行的修改至多只能影響視圖的 FROM 子句所引用的基表中的一個
  
  rowset_function_limited
  
  OPENQUERY 或 OPENROWSET 函數視提供程序功能而定
  
  SET
  
  指定要更新的列或變量名稱的列表
  
  column_name
  
  含有要更改數據的列的名稱column_name 必須駐留於 UPDATE 子句中所指定的表或視圖中標識列不能進行更新
  
  如果指定了限定的列名稱限定符必須同 UPDATE 子句中的表或視圖的名稱相匹配例如下面的內容有效
  
  UPDATE authors
   SET authorsau_fname = Annie
   WHERE au_fname = Anne
  
  FROM 子句中指定的表的別名不能作為 SET column_name 子句中的限定符使用例如下面的內容無效
  
  UPDATE titles
   SET tytd_sales = tytd_sales + sqty
   FROM titles t sales s
   WHERE ttitle_id = stitle_id
   AND sord_date = (SELECT MAX(salesord_date) FROM sales)
  
  若要使上例合法請從列名中刪除別名 t
  
  UPDATE titles
   SET ytd_sales = tytd_sales + sqty
   FROM titles t sales s
   WHERE ttitle_id = stitle_id
   AND sord_date = (SELECT MAX(salesord_date) FROM sales)
  
  expression
  
  變量字面值表達式或加上括弧的返回單個值的 subSELECT 語句expression 返回的值將替換 column_name 或 @variable 中的現有值
  
  DEFAULT
  
  指定使用對列定義的默認值替換列中的現有值如果該列沒有默認值並且定義為允許空值這也可用來將列更改為 NULL
  
  @variable
  
  已聲明的變量該變量將設置為 expression 所返回的值
  
  SET @variable = column = expression 將變量設置為與列相同的值這與 SET @variable = column column = expression 不同後者將變量設置為列更新前的值
  
  FROM < table_source >
  
  指定用表來為更新操作提供准則
  
  table_name [[AS] table_alias ]
  為更新操作提供准則的表的名稱
  如果所更新表與 FROM 子句中的表相同並且在 FROM 子句中對該表只有一個引用則指定或不指定 table_alias 均可如果所更新表在 FROM 子句中出現了不止一次則對該表的一個(且僅僅一個)引用不能指定表的別名FROM 子句中對該表的所有其它引用都必須包含表的別名
  
  
  view_name [ [ AS ] table_alias ]
  為更新操作提供准則的視圖的名稱帶 INSTEAD OF UPDATE 觸發器的視圖不能是含有 FROM 子句的 UPDATE 的目標
  
  WITH ( < table_hint > [ n ] )
  為源表指定一個或多個表提示有關表提示的信息請參見本卷的FROM
  
  rowset_function [ [AS] table_alias ]
  任意行集函數的名稱和可選別名
  
  derived_table
  是從數據庫中檢索行的子查詢derived_table 用作對外部查詢的輸入
  
  column_alias
  替換結果集內列名的可選別名在選擇列表中放入每個列的一個別名並將整個列別名列表用圓括號括起來
  
  
  由兩個或更多表的積組成的結果集例如
  
  SELECT *
  FROM tab LEFT OUTER JOIN tab ON tabc = tabc
   RIGHT OUTER JOIN tab LEFT OUTER JOIN tab
   ON tabc = tabc
   ON tabc = tabc
  
  對於多個 CROSS 聯接請使用圓括號來更改聯接的自然順序
  
  
  
  指定聯接操作的類型
  
  INNER
  指定返回所有相匹配的行對廢棄兩個表中不匹配的行如果未指定聯接類型則這是默認設置
  
  LEFT [OUTER]
  指定除所有由內聯接返回的行外所有來自左表的不符合指定條件的行也包含在結果集內來自左表的輸出列設置為 NULL
  
  RIGHT [OUTER]
  指定除所有由內聯接返回的行外所有來自右表的不符合指定條件的行也包含在結果集內來自右表的輸出列設置為 NULL
  
  FULL [OUTER]
  如果來自左表或右表的某行與選擇准則不匹配則指定在結果集內包含該行並且將與另一個表對應的輸出列設置為 NULL除此之外結果集中還包含通常由內聯接返回的所有行
  
  
  指定聯接提示或執行算法如果指定了 也必須明確指定 INNERLEFTRIGHT 或 FULL
  JOIN
  表示聯接所指定的表或視圖
  ON
  
  指定聯接所基於的條件盡管經常使用列和比較運算符但此條件可指定任何謂詞例如
  
  FROM Suppliers JOIN Products
   ON (SuppliersSupplierID = ProductsSupplierID)
  
  當條件指定列時列不一定必須具有相同的名稱或數據類型但是如果數據類型不一致則這些列要麼必須相互兼容要麼是 Microsoft® SQL Server&#; 能夠隱性轉換的類型如果數據類型不能隱式轉換則條件必須使用 CAST 函數顯式轉換數據類型
  CROSS JOIN
  
  指定兩個表的矢量積返回同樣的行就像要聯接的表只列於 FROM 子句中並且未指定 WHERE 子句
  
  WHERE
  
  指定條件來限定所更新的行根據所使用的 WHERE 子句的形式有兩種更新形式
  
  搜索更新指定搜索條件來限定要刪除的行
  
  
  定位更新使用 CURRENT OF 子句指定游標更新操作發生在游標的當前位置
  
  
  為要更新行指定需滿足的條件搜索條件也可以是聯接所基於的條件對搜索條件
From:http://tw.wingwit.com/Article/os/xtgl/201311/8891.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.