亚洲av色香蕉一区二区三区,十四以下岁毛片带血a级,亚洲 校园 欧美 国产 另类,亚洲av日韩av一区谷露,色欲av无码一区二区三区

  • 相關(guān)軟件
    >UPDATE 創(chuàng)建者:webmaster 更新時(shí)間:2006-02-16 15:51

    更改表中的現(xiàn)有數(shù)據(jù)。



    語(yǔ)法


    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

        }



    參數(shù)


    table_name



    需要更新的表的名稱(chēng)。如果該表不在當(dāng)前服務(wù)器或數(shù)據(jù)庫(kù)中,或不為當(dāng)前用戶(hù)所有,這個(gè)名稱(chēng)可用鏈接服務(wù)器、數(shù)據(jù)庫(kù)和所有者名稱(chēng)來(lái)限定。



    WITH ( < table_hint_limited > [ ...n ] )



    指定目標(biāo)表所允許的一個(gè)或多個(gè)表提示。需要有 WITH 關(guān)鍵字和圓括號(hào)。不允許有 READPAST、NOLOCK 和 READUNCOMMITTED。有關(guān)表提示的信息,請(qǐng)參見(jiàn) FROM。



    view_name



    要更新的視圖的名稱(chēng)。通過(guò) view_name 來(lái)引用的視圖必須是可更新的。用 UPDATE 語(yǔ)句進(jìn)行的修改,至多只能影響視圖的 FROM 子句所引用的基表中的一個(gè)。有關(guān)可更新視圖的更多信息,請(qǐng)參見(jiàn) CREATE VIEW



    rowset_function_limited



    OPENQUERY 或 OPENROWSET 函數(shù),視提供程序功能而定。有關(guān)提供程序所需功能的更多信息,請(qǐng)參見(jiàn) OLE DB 提供程序的 UPDATE 和 DELETE 語(yǔ)句要求。有關(guān)行集函數(shù)的更多信息,請(qǐng)參見(jiàn) OPENQUERYOPENROWSET。



    SET



    指定要更新的列或變量名稱(chēng)的列表。



    column_name



    含有要更改數(shù)據(jù)的列的名稱(chēng)。column_name 必須駐留于 UPDATE 子句中所指定的表或視圖中。標(biāo)識(shí)列不能進(jìn)行更新。



    如果指定了限定的列名稱(chēng),限定符必須同 UPDATE 子句中的表或視圖的名稱(chēng)相匹配。例如,下面的內(nèi)容有效:



    UPDATE authors
      SET authors.au_fname = 'Annie'

      WHERE au_fname = 'Anne'


    FROM 子句中指定的表的別名不能作為 SET column_name 子句中的限定符使用。例如,下面的內(nèi)容無(wú)效:



    UPDATE titles
      SET t.ytd_sales = t.ytd_sales + s.qty
      FROM titles t, sales s
      WHERE t.title_id = s.title_id
      AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)


    若要使上例合法,請(qǐng)從列名中刪除別名 t。



    UPDATE titles
      SET ytd_sales = t.ytd_sales + s.qty
      FROM titles t, sales s
      WHERE t.title_id = s.title_id
      AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)


    expression



    變量、字面值、表達(dá)式或加上括弧的返回單個(gè)值的 subSELECT 語(yǔ)句。expression 返回的值將替換 column_name@variable 中的現(xiàn)有值。



    DEFAULT



    指定使用對(duì)列定義的默認(rèn)值替換列中的現(xiàn)有值。如果該列沒(méi)有默認(rèn)值并且定義為允許空值,這也可用來(lái)將列更改為 NULL。



    @variable



    已聲明的變量,該變量將設(shè)置為 expression 所返回的值。



    SET @variable = column = expression 將變量設(shè)置為與列相同的值。這與 SET @variable = column, column = expression 不同,后者將變量設(shè)置為列更新前的值。



    FROM < table_source >



    指定用表來(lái)為更新操作提供準(zhǔn)則。有關(guān)更多信息,請(qǐng)參見(jiàn) FROM。


    table_name [[AS] table_alias ]


    為更新操作提供準(zhǔn)則的表的名稱(chēng)。

    如果所更新表與 FROM 子句中的表相同,并且在 FROM 子句中對(duì)該表只有一個(gè)引用,則指定或不指定 table_alias 均可。如果所更新表在 FROM 子句中出現(xiàn)了不止一次,則對(duì)該表的一個(gè)(且僅僅一個(gè))引用不能指定表的別名。FROM 子句中對(duì)該表的所有其它引用都必須包含表的別名。




    view_name [ [ AS ] table_alias ]


    為更新操作提供準(zhǔn)則的視圖的名稱(chēng)。帶 INSTEAD OF UPDATE 觸發(fā)器的視圖不能是含有 FROM 子句的 UPDATE 的目標(biāo)。



    WITH ( < table_hint > [ ...n ] )


    為源表指定一個(gè)或多個(gè)表提示。有關(guān)表提示的信息,請(qǐng)參見(jiàn)本卷的"FROM"。



    rowset_function [ [AS] table_alias ]


    任意行集函數(shù)的名稱(chēng)和可選別名。有關(guān)行集函數(shù)列表的信息,請(qǐng)參見(jiàn)行集函數(shù)。



    derived_table


    是從數(shù)據(jù)庫(kù)中檢索行的子查詢(xún)。derived_table 用作對(duì)外部查詢(xún)的輸入。



    column_alias


    替換結(jié)果集內(nèi)列名的可選別名。在選擇列表中放入每個(gè)列的一個(gè)別名,并將整個(gè)列別名列表用圓括號(hào)括起來(lái)。



    <joined_table>



    由兩個(gè)或更多表的積組成的結(jié)果集,例如:



    SELECT *
    FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3
      RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4
        ON tab3.c1 = tab4.c1
        ON tab2.c3 = tab4.c3


    對(duì)于多個(gè) CROSS 聯(lián)接,請(qǐng)使用圓括號(hào)來(lái)更改聯(lián)接的自然順序。



    <join_type>



    指定聯(lián)接操作的類(lèi)型。


    INNER


    指定返回所有相匹配的行對(duì)。廢棄兩個(gè)表中不匹配的行。如果未指定聯(lián)接類(lèi)型,則這是默認(rèn)設(shè)置。



    LEFT [OUTER]


    指定除所有由內(nèi)聯(lián)接返回的行外,所有來(lái)自左表的不符合指定條件的行也包含在結(jié)果集內(nèi)。來(lái)自左表的輸出列設(shè)置為 NULL。



    RIGHT [OUTER]


    指定除所有由內(nèi)聯(lián)接返回的行外,所有來(lái)自右表的不符合指定條件的行也包含在結(jié)果集內(nèi)。來(lái)自右表的輸出列設(shè)置為 NULL。



    FULL [OUTER]


    如果來(lái)自左表或右表的某行與選擇準(zhǔn)則不匹配,則指定在結(jié)果集內(nèi)包含該行,并且將與另一個(gè)表對(duì)應(yīng)的輸出列設(shè)置為 NULL。除此之外,結(jié)果集中還包含通常由內(nèi)聯(lián)接返回的所有行。



    <join_hint>


    指定聯(lián)接提示或執(zhí)行算法。如果指定了 <join_hint>,也必須明確指定 INNER、LEFT、RIGHT 或 FULL。有關(guān)聯(lián)接提示的更多信息,請(qǐng)參見(jiàn) FROM。



    JOIN


    表示聯(lián)接所指定的表或視圖。



    ON <search_condition>



    指定聯(lián)接所基于的條件。盡管經(jīng)常使用列和比較運(yùn)算符,但此條件可指定任何謂詞,例如:



    FROM Suppliers JOIN Products 
      ON (Suppliers.SupplierID = Products.SupplierID)


    當(dāng)條件指定列時(shí),列不一定必須具有相同的名稱(chēng)或數(shù)據(jù)類(lèi)型;但是,如果數(shù)據(jù)類(lèi)型不一致,則這些列要么必須相互兼容,要么是 Microsoft® SQL Server™ 能夠隱性轉(zhuǎn)換的類(lèi)型。如果數(shù)據(jù)類(lèi)型不能隱式轉(zhuǎn)換,則條件必須使用 CAST 函數(shù)顯式轉(zhuǎn)換數(shù)據(jù)類(lèi)型。



    有關(guān)搜索條件和謂詞的更多信息,請(qǐng)參見(jiàn)搜索條件。



    CROSS JOIN



    指定兩個(gè)表的矢量積。返回同樣的行,就像要聯(lián)接的表只列于 FROM 子句中,并且未指定 WHERE 子句。



    WHERE



    指定條件來(lái)限定所更新的行。根據(jù)所使用的 WHERE 子句的形式,有兩種更新形式:


    • 搜索更新指定搜索條件來(lái)限定要?jiǎng)h除的行。



    • 定位更新使用 CURRENT OF 子句指定游標(biāo)。更新操作發(fā)生在游標(biāo)的當(dāng)前位置。



    <search_condition>



    為要更新行指定需滿(mǎn)足的條件。搜索條件也可以是聯(lián)接所基于的條件。對(duì)搜索條件中可以包含的謂詞數(shù)量沒(méi)有限制。有關(guān)謂詞和搜索條件的更多信息,請(qǐng)參見(jiàn)搜索條件



    CURRENT OF



    指定更新在指定游標(biāo)的當(dāng)前位置進(jìn)行。



    GLOBAL



    指定 cursor_name 指的是全局游標(biāo)。



    cursor_name



    要從中進(jìn)行提取的開(kāi)放游標(biāo)的名稱(chēng)。如果同時(shí)存在名為 cursor_name 的全局游標(biāo)和局部游標(biāo),則在指定了 GLOBAL 時(shí),cursor_name 指的是全局游標(biāo)。如果未指定 GLOBAL,則 cursor_name 指局部游標(biāo)。游標(biāo)必須允許更新。



    cursor_variable_name



    游標(biāo)變量的名稱(chēng)。cursor_variable_name 必須引用允許更新的游標(biāo)。



    OPTION ( < query_hint > [ ,...n ] )



    指定優(yōu)化程序提示用于自定義 SQL Server 的語(yǔ)句處理。


    { HASH | ORDER } GROUP


    指定在查詢(xún)的 GROUP BY 或 COMPUTE 子句中指定的聚合使用哈?;蚺帕?。



    { LOOP | MERGE | HASH |} JOIN


    指定在整個(gè)查詢(xún)中所有的聯(lián)接操作由循環(huán)聯(lián)接、合并聯(lián)接或哈希聯(lián)接來(lái)完成。如果指定了不止一個(gè)聯(lián)接提示,則查詢(xún)優(yōu)化器為允許的聯(lián)接選擇開(kāi)銷(xiāo)最少的聯(lián)接策略。如果在同一個(gè)查詢(xún)中也為特定表對(duì)指定了聯(lián)接提示,則該提示在兩表的聯(lián)接中優(yōu)先。



    { MERGE | HASH | CONCAT } UNION


    指定所有的 UNION 操作通過(guò)合并、哈?;虼?lián) UNION 集合來(lái)完成。如果指定了不止一個(gè) UNION 提示,查詢(xún)優(yōu)化器就會(huì)從這些指定的提示中選擇開(kāi)銷(xiāo)最少的策略。

    說(shuō)明  如果在 FROM 子句中亦為任何特定聯(lián)接表對(duì)指定了聯(lián)接提示,則該提示優(yōu)先于任何 OPTION 子句中指定的聯(lián)接提示。






    FAST number_rows


    指定對(duì)查詢(xún)進(jìn)行優(yōu)化,以便快速檢索第一個(gè) number_rows(非負(fù)整數(shù))。在第一個(gè) number_rows 返回后,查詢(xún)繼續(xù)進(jìn)行并生成完整的結(jié)果集。



    FORCE ORDER


    指定查詢(xún)語(yǔ)法所指示的聯(lián)接順序在查詢(xún)優(yōu)化過(guò)程中予以保留。



    MAXDOP number


    只對(duì)指定了 sp_configure max degree of parallelism 配置選項(xiàng)的查詢(xún)替代該選項(xiàng)。當(dāng)使用 MAXDOP 查詢(xún)提示時(shí),所有和 max degree of parallelism 配置選項(xiàng)一起使用的語(yǔ)義規(guī)則均適用。有關(guān)更多信息,請(qǐng)參見(jiàn) max degree of parallelism 選項(xiàng)。



    ROBUST PLAN


    強(qiáng)制查詢(xún)優(yōu)化器嘗試執(zhí)行一個(gè)計(jì)劃,該計(jì)劃以性能為代價(jià)獲得最大可能的行大小。如果沒(méi)有可行的計(jì)劃,則查詢(xún)優(yōu)化器返回錯(cuò)誤,而不是將錯(cuò)誤檢測(cè)延遲至查詢(xún)執(zhí)行。行可能包含長(zhǎng)度可變的列;SQL Server 允許定義最大可能大小超出 SQL Server 處理能力的行。通常,應(yīng)用程序存儲(chǔ)實(shí)際大小在 SQL Server 處理能力范圍內(nèi)的行,而不管最大可能大小。如果 SQL Server 遇到過(guò)長(zhǎng)的行,則返回執(zhí)行錯(cuò)誤。



    KEEP PLAN



    強(qiáng)制查詢(xún)優(yōu)化器對(duì)查詢(xún)放寬估計(jì)的重新編譯閾值。當(dāng)對(duì)表中索引列的更改(更新、刪除或插入)達(dá)到估計(jì)數(shù)目時(shí)查詢(xún)會(huì)自動(dòng)重新編譯,該估計(jì)數(shù)目即為重新編譯閾值。指定 KEEP PLAN 將確保當(dāng)表有多個(gè)更新時(shí)不會(huì)頻繁地對(duì)查詢(xún)進(jìn)行重新編譯。



    注釋


    僅當(dāng)所修改的表是 table 變量時(shí),用戶(hù)定義的函數(shù)的主體中才允許使用 UPDATE 語(yǔ)句。



    table 變量在其作用域內(nèi)可以像常規(guī)表一樣訪問(wèn)。這樣,table 變量可作為一個(gè)表來(lái)使用,在該表中數(shù)據(jù)用 UPDATE 語(yǔ)句進(jìn)行更新。



    用 OPENDATASOURCE 函數(shù)構(gòu)造的、作為服務(wù)器名稱(chēng)部分的一個(gè)四段名稱(chēng),在 UPDATE 語(yǔ)句中可以出現(xiàn)表名的任何地方都可作為表源使用。



    如果對(duì)行的更新違反了某個(gè)約束或規(guī)則,或違反了對(duì)列的 NULL 設(shè)置,或者新值是不兼容的數(shù)據(jù)類(lèi)型,則取消該語(yǔ)句、返回錯(cuò)誤并且不更新任何記錄。



    當(dāng) UPDATE 語(yǔ)句在表達(dá)式取值過(guò)程中遇到算術(shù)錯(cuò)誤(溢出、被零除或域錯(cuò)誤)時(shí),則不進(jìn)行更新。批處理的剩余部分不再執(zhí)行,并且返回錯(cuò)誤信息。



    如果對(duì)參與聚集索引的一列或多列的更新導(dǎo)致聚集索引和行的大小超過(guò) 8,060 字節(jié),則更新失敗并且返回錯(cuò)誤信息。



    當(dāng)對(duì)表的 UPDATE 操作定義 INSTEAD-OF 觸發(fā)器時(shí),將執(zhí)行觸發(fā)器而不執(zhí)行 UPDATE 語(yǔ)句。SQL Server 以前的版本只支持在 UPDATE 和其它數(shù)據(jù)修改語(yǔ)句中定義 AFTER 觸發(fā)器。



    當(dāng)更新查詢(xún)既更新聚集鍵又更新一個(gè)或多個(gè) text、image 或 Unicode 列時(shí),如果可以更改不止一行,則更新操作失敗,SQL Server 返回錯(cuò)誤信息。



    用 UPDATE 修改 text、ntext image 列時(shí)將對(duì)列進(jìn)行初始化,向其指派有效文本指針,并且分配至少一個(gè)數(shù)據(jù)頁(yè)(除非用 NULL 更新該列)。



    說(shuō)明  UPDATE 語(yǔ)句將記入日志。如果要替換或修改大塊的 text、ntextimage 數(shù)據(jù),請(qǐng)使用 WRITETEXT 或 UPDATETEXT 語(yǔ)句而不要使用 UPDATE 語(yǔ)句。WRITETEXT 和 UPDATETEXT 語(yǔ)句(根據(jù)默認(rèn))不記入日志。



    所有的 charnchar 列向右填充至定義長(zhǎng)度。



    對(duì)于用于遠(yuǎn)程表以及本地和遠(yuǎn)程分區(qū)視圖的 UPDATE 語(yǔ)句,忽略 SET ROWCOUNT 選項(xiàng)的設(shè)置。



    如果 ANSI_PADDING 設(shè)置為 OFF,則會(huì)從插入 varcharnvarchar 列的數(shù)據(jù)中刪除所有尾隨空格,但只包含空格的字符串除外。這些字符串被截?cái)酁榭兆址H绻?ANSI_PADDING 設(shè)置為 ON,則插入尾隨空格。Microsoft SQL Server ODBC 驅(qū)動(dòng)程序和用于 SQL Server 的 OLE DB 提供程序自動(dòng)對(duì)每個(gè)連接設(shè)置 ANSI_PADDING ON。這可在 ODBC 數(shù)據(jù)源中進(jìn)行配置,或者通過(guò)設(shè)置連接特性或?qū)傩赃M(jìn)行設(shè)置。



    使用 WHERE CURRENT OF 子句的定位更新將在游標(biāo)的當(dāng)前位置更新單行。這比使用 WHERE <search_condition> 子句限定要更新的行的搜索更新更為精確。當(dāng)搜索條件不唯一標(biāo)識(shí)一行時(shí),搜索更新將修改多行。



    如果 UPDATE 語(yǔ)句包含了未指定每個(gè)所更新列的位置只有一個(gè)可用值的 FROM 子句(換句話說(shuō),如果 UPDATE 語(yǔ)句是不確定性的),則其結(jié)果將不明確。例如,對(duì)于下面腳本中的 UPDATE 語(yǔ)句,表 s 中的兩行都滿(mǎn)足 UPDATE 語(yǔ)句中的 FROM 子句的限定條件,但是將用 s 的哪一行來(lái)更新表 t 內(nèi)的行是不明確的。



    CREATE TABLE s (ColA INT, ColB DECIMAL(10,3))
    GO
    CREATE TABLE t (ColA INT PRIMARY KEY, ColB DECIMAL(10,3))
    GO
    INSERT INTO s VALUES(1, 10.0)
    INSERT INTO s VALUES(1, 20.0)
    INSERT INTO t VALUES(1, 0.0)
    GO
    UPDATE t
    SET t.ColB = t.ColB + s.ColB
    FROM t INNER JOIN s ON (t.ColA = s.ColA)
    GO


    當(dāng)組合 FROM 和 WHERE CURRENT OF 子句時(shí),可能發(fā)生同樣的問(wèn)題。在本例中,表 t2 中的兩行都滿(mǎn)足 UPDATE 語(yǔ)句中的 FROM 子句的限定條件。將用表 t2 的哪一行來(lái)更新表 t1 中的行是不明確的。



    CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT)
    GO
    CREATE TABLE t2(d1 INT PRIMARY KEY, d2 INT)
    GO
    INSERT INTO t1 VALUES (1, 10)
    INSERT INTO t2 VALUES (1, 20)
    INSERT INTO t2 VALUES (2, 30)
    go

    DECLARE abc CURSOR LOCAL FOR
    SELECT * FROM t1

    OPEN abc

    FETCH abc

    UPDATE t1 SET c2 = c2 + d2
    FROM t2
    WHERE CURRENT OF abc
    GO


    設(shè)置變量和列


    變量名可用于 UPDATE 語(yǔ)句來(lái)顯示受影響的舊值和新值。這種方法應(yīng)該僅用在 UPDATE 語(yǔ)句只影響單個(gè)記錄時(shí);如果 UPDATE 語(yǔ)句影響多個(gè)記錄,則變量只含有所更新行中的一行的值。



    權(quán)限


    UPDATE 權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色成員、db_ownerdb_datawriter 固定數(shù)據(jù)庫(kù)角色成員以及表的所有者。sysadmindb_owner db_securityadmin 角色的成員和表所有者可以將權(quán)限轉(zhuǎn)讓給其他用戶(hù)。



    如果 UPDATE 語(yǔ)句包含 WHERE 子句,或 SET 子句中的 expression 使用了表中的某個(gè)列,則還要求所更新表的 SELECT 權(quán)限。



    示例


    A. 使用簡(jiǎn)單的 UPDATE


    下列示例說(shuō)明如果從 UPDATE 語(yǔ)句中去除 WHERE 子句,所有的行會(huì)受到什么影響。



    下面這個(gè)例子說(shuō)明,如果表 publishers 中的所有出版社將總部搬遷到佐治亞州的亞特蘭大市,表 publishers 如何更新。



    UPDATE publishers
    SET city = 'Atlanta', state = 'GA'


    本示例將所有出版商的名字變?yōu)?NULL。



    UPDATE publishers
    SET pub_name = NULL


    也可以在更新中使用計(jì)算值。本示例將表 titles 中的所有價(jià)格加倍。



    UPDATE titles
    SET price = price * 2


    B.把 WHERE 子句和 UPDATE 語(yǔ)句一起使用


    WHERE 子句指定要更新的行例如,在下面這個(gè)虛構(gòu)的事件中,北加利福尼亞更名為 Pacifica(縮寫(xiě)為 PC),而奧克蘭的市民投票決定將其城市的名字改為 Bay City。這個(gè)例子說(shuō)明如何為奧克蘭市以前的所有居民(他們的地址已經(jīng)過(guò)時(shí))更新表 authors。



    UPDATE authors
      SET state = 'PC', city = 'Bay City'
        WHERE state = 'CA' AND city = 'Oakland'


    必須編寫(xiě)另一個(gè)語(yǔ)句來(lái)更改北加利福尼亞其它城市的居民所在的州名。



    C.通過(guò) UPDATE 語(yǔ)句使用來(lái)自另一個(gè)表的信息


    本示例修改表 titles 中的 ytd_sales 列,以反映表 sales 中的最新銷(xiāo)售記錄。



    UPDATE titles
      SET ytd_sales = titles.ytd_sales + sales.qty
        FROM titles, sales
          WHERE titles.title_id = sales.title_id
          AND sales.ord_date = (SELECT MAX(sales.ord_date) FROM sales)


    這個(gè)例子假定,一種特定的商品在特定的日期只記錄一批銷(xiāo)售量,而且更新是最新的。如果不是這樣(即如果一種特定的商品在同一天可以記錄不止一批銷(xiāo)售量),這里所示的例子將出錯(cuò)。例子可正確執(zhí)行,但是每種商品只用一批銷(xiāo)售量進(jìn)行更新,而不管那一天實(shí)際銷(xiāo)售了多少批。這是因?yàn)橐粋€(gè) UPDATE 語(yǔ)句從不會(huì)對(duì)同一行更新兩次。



    對(duì)于特定的商品在同一天可銷(xiāo)售不止一批的情況,每種商品的所有銷(xiāo)售量必須在 UPDATE 語(yǔ)句中合計(jì)在一起,如下例所示:



    UPDATE titles
      SET ytd_sales =
        (SELECT SUM(qty)
          FROM sales
            WHERE sales.title_id = titles.title_id
            AND sales.ord_date IN (SELECT MAX(ord_date) FROM sales))
      FROM titles, sales


    D. 將 UPDATE 語(yǔ)句與 SELECT 語(yǔ)句中的 TOP 子句一起使用


    這個(gè)例子對(duì)來(lái)自表 authors 的前十個(gè)作者的 state 列進(jìn)行更新。



    UPDATE authors
    SET state = 'ZZ'
    FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname) AS t1
    WHERE authors.au_id = t1.au_id
    相關(guān)文章
    本頁(yè)查看次數(shù):