Sql-Server

從查詢結果更新記錄

  • December 29, 2021

假設我有一個具有以下定義的表 X:

CREATE TABLE X( id INT PRIMARY KEY, field1 varchar(100), field2 int, field3 double);

然後我發出一個查詢:

SELECT field1, field2 from X;

假設這個查詢返回了 10 條記錄。

有沒有辦法編寫查詢來更新 SELECT 中的記錄 #5?查詢會是什麼樣子?或者我必須在該查詢中包含 id,以某種方式在記錄 #5 中找到它的值,然後在下面的查詢中使用它?

類似的東西UPDATE X SET field1 = 'def' WHERE...

我對條件有疑問 - 為該WHERE子句寫什麼。我正在使用多個 DBMS,所以如果可能的話,需要一種通用的方式。

更多細節:

我可以有這樣的查詢:

SELECT field1, field2 FROM X WHERE field3 = "abc";

或者我可以有這樣的查詢:

SELECT X.field1, Y.field2 FROM X, Y WHERE X.pk = Y.pk AND X.field3 = "abc";

假設當我跳到記錄 5 時,X.field1 將顯示“abc”。我希望將此欄位更新為“def”。所以我輸入“def”並跳到記錄 6。在這兩種情況下,我都想更新結果記錄集的記錄 5 X.field1。

正如您所看到的,我正在查看記錄集中的記錄(執行查詢的結果)。我想模仿 Access 正在做什麼。

假設我在 Access 中打開新表單並基於查詢。我根據自己的喜好重新排列表單上的欄位並執行表單。然後我去在表單中顯示記錄#5,然後更新一個欄位。無論表單背後的查詢有多複雜,此更新都是即時的。

我實際上想模仿 Access 正在做的事情 - 通過它在記錄集中的位置更新記錄

與大多數 RDBMS 系統一樣,Access 使用鍵值來辨識和更新行。看:

要添加、編輯或刪除記錄,基礎數據源中的記錄必須有唯一索引。否則,Microsoft Access 工作區中的 AddNew、Delete 或 Edit 方法呼叫將出現“權限被拒絕”錯誤,或者 ODBCDirect 工作區中的更新呼叫將出現“無效參數”錯誤。

Recordset.Update 方法 (DAO)

SELECT  *
FROM    Table t
WHERE   1 = 1
       AND EXISTS (Define criteria here)

上面是一個選擇語句。它返回儲存在表中的行。要使其成為 UPDATE 語句,請使用完全相同的語法,但不使用 SELECT 語法,而是使用 UPDATE 語法。

UPDATE  t
SET     Column1 = 'SomeNeatValue'
       ,Column2 = 'AnotherNeatValue'
FROM    Table t
WHERE   1 = 1
       AND EXISTS (Define criteria here)
   

您如何確定選擇/更新哪些記錄取決於開發人員。如果您需要幫助,我會從www.w3schools.com開始了解查詢語法。

引用自:https://dba.stackexchange.com/questions/274922