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

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

    從表中刪除行。



    語法


    DELETE

        [ FROM ]

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

             | view_name

            
    | rowset_function_limited

            }



            [ FROM { < table_source > } [ ,...n ] ]



        [ WHERE

            { < search_condition >

            | { [ 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

            | FAST number_rows

            | FORCE ORDER

            | MAXDOP

            | ROBUST PLAN

            | KEEP PLAN

        }



    參數(shù)


    FROM



    是可選的關(guān)鍵字,可用在 DELETE 關(guān)鍵字與目標(biāo) table_name、view_namerowset_function_limited 之間。



    table_name



    是要從其中刪除行的表的名稱。



    在其作用域內(nèi)的 table 變量、或是將 OPENDATASOURCE 函數(shù)作為服務(wù)器名稱的由四部分組成的表名(或視圖名稱)還可以在 DELETE 語句中作為表源使用。



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



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



    view_name



    是視圖名稱。在視圖的 FROM 子句中,view_name 引用的視圖必須可更新且正確引用一個基表。有關(guān)可更新視圖的更多信息,請參見 CREATE VIEW。



    說明  如果表或視圖存在于另一個數(shù)據(jù)庫內(nèi)或有一個不同于當(dāng)前用戶的所有者,則使用格式為 server_name.database.[owner].object_name 的由四部分組成的合法名稱。有關(guān)更多信息,請參見 Transact-SQL 語法規(guī)則。



    rowset_function_limited



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



    FROM < table_source >



    指定附加的 FROM 子句。這個對 DELETE 的 Transact-SQL 擴展使您得以從 <table_sources> 指定數(shù)據(jù),并從第一個 FROM 子句內(nèi)的表中刪除相應(yīng)的行。



    這個擴展指定聯(lián)接,可在 WHERE 子句中取代子查詢來標(biāo)識要刪除的行。


    table_name [[AS] table_alias ]


    是為刪除操作提供標(biāo)準(zhǔn)值的表名。



    view_name [ [ AS ] table_alias ]


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



    WITH (<table_hint>


    指定一個或更多表提示。有關(guān)表提示的更多信息,請參見 FROM。



    rowset_function [ [AS] table_alias ]


    是行集函數(shù)名和可選別名。有關(guān)行集函數(shù)列表的更多信息,請參見行集函數(shù)



    derived_table [AS] table_alias


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



    column_alias


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



    <joined_table>



    由兩個或更多表的積組成的結(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


    對于多個 CROSS 聯(lián)接,請使用圓括號來更改聯(lián)接的自然順序。



    <join_type>



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


    INNER


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



    LEFT [OUTER]


    指定在結(jié)果集內(nèi)包含左表中所有不滿足指定條件的行,并將右表中的輸出列設(shè)置為 NULL 以作為對內(nèi)聯(lián)接所返回的所有行的補充。



    RIGHT [OUTER]


    指定在結(jié)果集內(nèi)包含右表中所有不滿足指定條件的行,并將左表中的輸出列設(shè)置為 NULL 以作為對內(nèi)聯(lián)接所返回的所有行的補充。



    FULL [OUTER]


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



    JOIN


    是表示在刪除操作中使用 SQL-92 式聯(lián)接的關(guān)鍵字。



    ON <search_condition>



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



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


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



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



    CROSS JOIN



    指定兩個表的矢量積。這將返回相同的行,就好像在舊式的非 SQL-92 式聯(lián)接中并沒有指定 WHERE 子句。



    WHERE



    指定用于限制刪除行數(shù)的條件。如果沒有提供 WHERE 子句,則 DELETE 刪除表中的所有行?;?WHERE 子句中所指定的條件,有兩種形式的刪除操作。


    • 搜索刪除指定搜索條件限定刪除的行。



    • 定位刪除使用 CURRENT OF 子句指定游標(biāo)。刪除操作在游標(biāo)的當(dāng)前位置發(fā)生。這比使用 WHERE search_condition 子句限定刪除的行的搜索 DELETE 精確。如果搜索條件不唯一標(biāo)識單行,則搜索 DELETE 刪除多行。




    <search_condition>


    指定刪除行的限定條件。對搜索條件中可以包含的謂詞數(shù)量沒有限制。有關(guān)更多信息,請參見搜索條件



    CURRENT OF


    指定在指定游標(biāo)的當(dāng)前位置完成 DELETE。



    GLOBAL


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



    cursor_name


    是從其中進行提取的打開游標(biāo)的名稱。當(dāng)全局和局部游標(biāo)都以 cursor_name 作為它們的名稱存在時,如果指定 GLOBAL,則 cursor_name 引用全局游標(biāo),如果未指定 GLOBAL,則 cursor_name 引用局部游標(biāo)。游標(biāo)必須允許更新。



    cursor_variable_name


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



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



    是表示使用優(yōu)化程序提示自定義 SQL Server 的語句處理的關(guān)鍵字。


    {HASH | ORDER} GROUP


    指定在查詢的 GROUP BY 或 COMPUTE 子句中指定的聚合使用哈希或排列。



    {MERGE | HASH | CONCAT} UNION


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

    說明  如果還為 FROM 子句中的某對鏈接表指定了 <joint_hint>,則這個提示優(yōu)先于 OPTION 子句中所指定的任何 <join_hint>。






    FAST number_rows


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



    FORCE ORDER


    指定在查詢優(yōu)化過程中保持由查詢語法表示的聯(lián)接順序。



    MAXDOP number


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



    ROBUST PLAN


    強制查詢優(yōu)化器嘗試執(zhí)行一個計劃,該計劃以性能為代價獲得最大可能的行大小。如果不能使用這樣的計劃,查詢優(yōu)化器將返回錯誤而不是延遲對查詢執(zhí)行的錯誤檢測。行可以包含可變長度列;SQL Server 允許將行大小定義為超過 SQL Server 處理能力的最大可能的大小。通常,應(yīng)用程序存儲實際大小在 SQL Server 處理能力范圍內(nèi)的行,而不管最大可能大小。如果 SQL Server 遇到過長的行,則返回執(zhí)行錯誤。



    KEEP PLAN



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



    注釋


    如果所修改的對象是 table 變量,則 DELETE 可用在用戶定義函數(shù)的正文中。



    對于由四部分組成的表名(或視圖名稱),若其中的服務(wù)器名稱使用的是 OPENDATASOURCE 函數(shù),則該表名可以在表名能夠出現(xiàn)的任何位置作為表源使用。



    如果 DELETE 語句違反了觸發(fā)器,或試圖刪除另一個有 FOREIGN KEY 約束的表內(nèi)的數(shù)據(jù)所引用的行,則可能會失敗。如果 DELETE 刪除了多行,而在刪除的行中有任何一行違反觸發(fā)器或約束,則將取消該語句,返回錯誤且不刪除任何行。



    如果在對表或視圖的 DELETE 操作上定義了 INSTEAD-OF 觸發(fā)器,該觸發(fā)器將執(zhí)行 instead of DELETE 語句。SQL Server 的早期版本只支持 DELETE 上的 AFTER 觸發(fā)器和其它修改語句。



    當(dāng) DELETE 語句遇到在表達式評估過程中發(fā)生的算術(shù)錯誤(溢出、被零除或域錯誤)時,SQL Server 將處理這些錯誤,就好象 SET ARITHABORT 打開一樣。將取消批處理中的其余部分并返回錯誤信息。



    對遠程表和本地及遠程分區(qū)視圖上的 DELETE 語句將忽略 SET ROWCOUNT 選項的設(shè)置。



    如果要刪除在表中的所有行,則 TRUNCATE TABLE 比 DELETE 快。DELETE 以物理方式一次刪除一行,并在事務(wù)日志中記錄每個刪除的行。TRUNCATE TABLE 則釋放所有與表關(guān)聯(lián)的頁。因此,TRUNCATE TABLE 比 DELETE 快且需要的事務(wù)日志空間更少。TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 相當(dāng),但是 TRUNCATE TABLE 不能用于由外鍵引用的表。DELETE 和 TRUNCATE TABLE 都使刪除的行所占用的空間可用于存儲新數(shù)據(jù)。



    權(quán)限


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



    如果語句包含 WHERE 子句,則還必須有 SELECT 權(quán)限。



    示例


    A. 不帶參數(shù)使用 DELETE


    下例從 authors表中刪除所有行。



    USE pubs
    DELETE authors


    B. 在行集上使用 DELETE


    因為 au_lname 可能不是唯一的,下例刪除其中的 au_lname 是 McBadden 的所有行。



    USE pubs
    DELETE FROM authors
    WHERE au_lname = 'McBadden'


    C. 在游標(biāo)的當(dāng)前行上使用 DELETE


    下例顯示在名為 complex_join_cursor 的游標(biāo)上所做的刪除。它只影響當(dāng)前從游標(biāo)提取的單行。



    USE pubs
    DELETE FROM authors
    WHERE CURRENT OF complex_join_cursor


    D. 基于子查詢使用 DELETE 或使用 Transact-SQL 擴展


    下例顯示基于聯(lián)接或相關(guān)子查詢從基表中刪除記錄的 Transact-SQL 擴展。第一個 DELETE 顯示與 SQL-92 兼容的子查詢解決方法,第二個 DELETE 顯示 Transact-SQL 擴展。兩個查詢都基于存儲在 titles 表中的標(biāo)題從 titleauthors 表中刪除行。



    /* SQL-92-Standard subquery */
    USE pubs
    DELETE FROM titleauthor
    WHERE title_id IN
      (SELECT title_id
      FROM titles
      WHERE title LIKE '%computers%')

    /* Transact-SQL extension */
    USE pubs
    DELETE titleauthor
    FROM titleauthor INNER JOIN titles
      ON titleauthor.title_id = titles.title_id
    WHERE titles.title LIKE '%computers%'


    E. 在 DELETE 和 SELECT 中使用 TOP 子句


    由于可以在 DELETE 語句中指定 SELECT 語句,因此還可以在 SELECT 語句中使用 TOP 子句。例如,下例從 authors 表中刪除前 10 個作者。



    DELETE authors 
    FROM (SELECT TOP 10 * FROM authors) AS t1
    WHERE authors.au_id = t1.au_id
    相關(guān)文章
    本頁查看次數(shù):