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

更改數據

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

  前言:
  在創建表並添加數據之後更改或更新表中的數據就成為維護數據庫的一個日常過程Microsoft® SQL Server&#; 提供下列方法更改現有表中的數據
  
  UPDATE 語?
  可用來更新表或視圖中特定行的數據
  
  數據庫應用程序接口 (API)
  支持用來更新某個結果集當前位置數據的選項TransactSQL 服務器游標也支持更新游標當前行的數據
  
  UPDATETEXT 語句
  可用來更新特定的 ntexttext 和 image 值
  
  更新操作適用於視圖和表但是有一些限制條件
  
  使用 UPDATE 語句更改數據
  
  UPDATE 語句可以更改表或視圖中單行行組或所有行的數據值還可以用該語句更新遠程服務器上的行(使用鏈接服務器名稱或 OPENROWSETOPENDATASOURCE 和 OPENQUERY 函數)前提是用來訪問遠程服務器的 OLE DB 提供程序支持更新操作引用某個表或視圖的 UPDATE 語句每次只能更改一個基表中的數據
  
  UPDATE 語句包括以下主要子句
  
  SET
  包含要更新的列和每個列的新值的列表(用逗號分隔)格式為 column_name = expression表達式提供的值包含多個項目如常量從其它表或視圖的列中選擇的值或使用復雜的表達式計算出來的值
  
  FROM
  指定為 SET 子句中的表達式提供值的表或視圖以及各個源表或視圖之間可選的聯接條件
  
  WHERE
  指定搜索條件該搜索條件定義源表和視圖中可以為 SET 子句中的表達式提供值的行
  
  此更新語句將類別 (category) 中所有 Northwind 產品的價格提高了 %
  
  UPDATE NorthwinddboProducts
  SET UnitPrice = UnitPrice *
  WHERE CategoryID =
  
  使用 UPDATE 更改數據
  
  
  TransactSQL(點擊查看)
  
  說明 UPDATE 語句有日志記錄如果要更改大量的 text 或 image 數據請考慮使用 UPDATETEXT 或 WRITETEXT 語句這兩個語句默認情況無日志記錄
  
  使用 SET 子句更改數據
  
  SET 子句指定要更改的列和這些列的新值對所有符合 WHERE 子句搜索條件的行將使用 SET 子句中指定的值更新指定列中的值如果沒有指定 WHERE 子句則更新所有行例如如果 publishers 表中的所有出版社都將總部遷移到喬治亞 (Georgia) 州的亞特蘭大 (Atlanta)則可使用以下 UPDATE 語句
  
  UPDATE publishers SET city = Atlanta state = Georgia
  
  計算列的值可在更新操作中計算和使用例如要使 titles 表中的所有價格加倍titles 表的 price 列可以設置為等於 price *
  
  SET 子句中使用的表達式也可以是只返回一個值的子查詢例如如果 Northwind 數據庫有一個 OrderSummary 表
  
  UPDATE OrderSummary
  SET LastDays =
   (SELECT SUM(OrdDetUnitPrice * OrdDetQuantity)
   FROM [Order Details] AS OrdDet
   JOIN Orders AS Ord
   ON (OrdDetOrderID = OrdOrderID
   AND OrdOrderDate > DATEADD(ddGETDATE()) )
   )
  
  使用 WHERE 子句更改數據
  WHERE 子句執行兩種功能
  
  指定要更新的行
  
  
  如果同時指定了 FROM 子句則指定源表中可以為更新語句提供值的行
  如果沒有指定 WHERE 子句則將更新表中的所有行
  
  以下 UPDATE 語句更改其中一個運輸商的名稱
  
  UPDATE NorthwinddboShippers
  SET CompanyName = United Shippers
  WHERE CompanyName = United Packages
  
  使用 FROM 子句更改數據
  使用 FROM 子句可將數據從一個或多個表或視圖拉入要更新的表中例如當作者 Dirk Stringer 獲得一項合同在 titles 表中為他的書 The Psychology of Computer Cooking 指定一個書名標識號時就可以通過為這本最新的書添加書名標識號來更新 titleauthor 表中 Dirk 的行
  
  下例更新 titleauthor 表中 Dirk Stringer 的行以便為作者最新的書添加書名標識號
  
  UPDATE titleauthor
   SET title_id = titlestitle_id
   FROM titles INNER JOIN titleauthor
   ON titlestitle_id = titleauthortitle_id
   INNER JOIN authors
   ON titleauthorau_id = authorsau_id
   WHERE titlestitle = Net Etiquette
   AND au_lname = Locksley
  
  使用游標更改數據
  
  ADOOLE DB 和 ODBC 應用程序接口 (API) 支持對結果集內應用程序所處的當前行進行更新其基本過程如下
  
  將結果集的各列綁定到程序變量上
  
  
  執行查詢
  
  
  執行 API 函數或方法將應用程序定位在結果集的某一行上
  
  
  使用要更新的列的新數據值填充綁定的程序變量
  
  
  執行以下函數或方法之一插入行
  在 ADO 中調用 Recordset 對象的 Update 方法
  
  
  在 OLE DB 中調用 IRowsetChange 接口的 SetData 方法
  
  
  在 ODBC 中調用帶 SQL_UPDATE 選項的 SQLSetPos 函數
  使用 TransactSQL 服務器游標時可以使用包含 WHERE CURRENT OF 子句的 UPDATE 語句更新當前行使用此子句所做的更改只影響游標所在行如果游標基於某個聯接則只修改 UPDATE 語句中指定的 table_name而不影響其它參與該游標的表
  
  USE Northwind
  GO
  DECLARE abc CURSOR FOR
  SELECT CompanyName
  FROM Shippers
  
  OPEN abc
  GO
  
  FETCH NEXT FROM abc
  GO
  
  UPDATE Shippers SET CompanyName = NSpeedy Express Inc
  WHERE CURRENT OF abc
  GO
  
  CLOSE abc
  DEALLOCATE abc
  GO
  
  更改 ntexttext 或 image 數據
  有多種方法可以在替換整個值時更新行中的 ntexttext 或 image 值
  
  在 UPDATE 語句中指定相對較短的數據其方式與 charnchar 或 binary 數據相同
  
  
  使用 TransactSQL WRITETEXT 語句
  
  ADO 應用程序可以使用 AppendChunk 方法指定較長的 ntexttext 或 image 數據
  
  OLE DB 應用程序可以使用 ISequentialStream 接口寫入新的 ntexttext 或 image 值
  
  ODBC 應用程序可以使用 SQLPutData 的執行中的數據形式寫入新的 ntexttext 或 image 值
  
  DBLibrary 應用程序可以使用 dbwritetext 函數
  
  Microsoft® SQL Server&#; 還支持僅更新 ntexttext 或 image 值的一部分在 DBLibrary 中該操作可以使用 dbupdatetext 函數實現
  
  所有其它應用程序和 TransactSQL 腳本批處理存儲過程和觸發器可以使用 UPDATETEXT 語句只更新 ntexttext 或 image 列的一部分
  
  以下腳本顯示同時使用 UPDATETEXT 和 PATINDEX 查找和替換 text 值中特定字符串的方法
  
  USE Northwind
  GO
  CREATE TABLE TextParts (ColA INT PRIMARY KEY ColB TEXT)
  GO
  INSERT INTO TextParts
   VALUES(
   Sample string START TAG Text to go END TAG Trailing text)
  GO
  DECLARE @PtrVar BINARY()
  DECLARE @InsertPos INT
  DECLARE @DeleteLen INT
  
  SELECT @PtrVar = TEXTPTR(ColB)
   @InsertPos = (PATINDEX(%START TAG% ColB) + )
   @DeleteLen = (
   PATINDEX(%END TAG% ColB)
   ( PATINDEX(%START TAG% ColB) +
   + /* allow for blanks */ )
   )
  FROM TextParts
  WHERE ColA =
  
  UPDATETEXT TextPartsColB
   @PtrVar
   @InsertPos
   @DeleteLen
   WITH LOG
   The new text
  GO
  
  SELECT * FROM TextParts
  GO
  
  由最後的 SELECT 語句得出的結果集為
  
  ColA ColB
  
   Sample string START TAG The new text END TAG Trailing text
  

From:http://tw.wingwit.com/Article/os/xtgl/201311/9176.html
  • 上一篇文章:

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