精品国产亚洲一区二区三区,男女作爱在线观看免费网站,欧美的又大又长做禁片A片,97国产精品人妻无码久久久

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

    將新行添加到表或視圖。



    語法


    INSERT [ INTO]

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

            | view_name

        
        | rowset_function_limited

        }



        {    
    [ ( column_list ) ]

            { VALUES

                ( { DEFAULT | NULL | expression } [ ,...n] )

                
    | derived_table

                
    | execute_statement

            }

        }

        
    | DEFAULT VALUES



    < table_hint_limited > ::=

        
    { FASTFIRSTROW

            
    | HOLDLOCK

            | PAGLOCK

            | READCOMMITTED

            | REPEATABLEREAD

            | ROWLOCK

            | SERIALIZABLE

            | TABLOCK

            | TABLOCKX

            | UPDLOCK

        }



    參數(shù)


    [INTO]



    一個可選的關(guān)鍵字,可以將它用在 INSERT 和目標表之間。



    table_name



    將要接收數(shù)據(jù)的表或 table 變量的名稱。



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



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



    view_name



    視圖的名稱及可選的別名。通過 view_name 來引用的視圖必須是可更新的。由 INSERT 語句所做的修改不能影響視圖的 FROM 子句中引用的多個基表。例如,在多表視圖中的 INSERT 必須使用 column_listcolumn_list 是只引用來自一個基表的列。有關(guān)可更新視圖的更多信息,請參見 CREATE VIEW。



    rowset_function_limited



    是 OPENQUERY 或 OPENROWSET 函數(shù)。有關(guān)更多信息,請參見 OPENQUERY 以及 OPENROWSET



    (column_list)



    要在其中插入數(shù)據(jù)的一列或多列的列表。必須用圓括號將 column_list 括起來,并且用逗號進行分隔。



    如果某列不在 column_list 中,則 Microsoft® SQL Server™ 必須能夠基于該列的定義提供一個值;否則不能裝載行。如果列滿足下面的條件,那么 SQL Server 將自動為列提供值:


    • 具有 IDENTITY 屬性。使用下一個增量標識值。



    • 有默認值。使用列的默認值。



    • 具有 timestamp 數(shù)據(jù)類型。使用當前的時間戳值。



    • 是可空的。使用空值。



    當向標識列中插入顯式的值時,必須使用 column_list 及 VALUES 列表,并且對于表,SET IDENTITY_INSERT 選項必須是 ON。



    VALUES



    引入要插入的數(shù)據(jù)值的列表。對于 column_list(如果已指定)中或者表中的每個列,都必須有一個數(shù)據(jù)值。必須用圓括號將值列表括起來。



    如果 VALUES 列表中的值與表中列的順序不相同,或者未包含表中所有列的值,那么必須使用 column_list 明確地指定存儲每個傳入值的列。



    DEFAULT



    強制 SQL Server 裝載為列定義的默認值。如果對于某列并不存在默認值,并且該列允許 NULL,那么就插入 NULL。對于使用 timestamp 數(shù)據(jù)類型定義的列,插入下一個時間戳值。DEFAULT 對標識列無效。



    expression



    一個常量、變量或表達式。表達式不能包含 SELECT 或 EXECUTE 語句。



    derived_table



    任何有效的 SELECT 語句,它返回將裝載到表中的數(shù)據(jù)行。



    execute_statement



    任何有效的 EXECUTE 語句,它使用 SELECT 或 READTEXT 語句返回數(shù)據(jù)。



    如果將 execute_statement 與 INSERT 一起使用,那么每個結(jié)果集都必須與表中或 column_list 中的列兼容。execute_statement 可以用來執(zhí)行同一服務(wù)器或遠程服務(wù)器上的存儲過程。執(zhí)行遠程服務(wù)器中的過程,然后將結(jié)果集返回到本地服務(wù)器,并裝載到本地服務(wù)器的表中。如果 execute_statement 使用 READTEXT 語句返回數(shù)據(jù),那么每個單獨的 READTEXT 語句最多可以返回 1 MB (1024 KB) 的數(shù)據(jù),也可以將 execute_statement 與擴展過程一起使用,并且插入擴展過程的主線程返回的數(shù)據(jù)。不會插入不是主線程的其它線程中的輸出結(jié)果。



    說明  對于 SQL Server 7.0,execute_statement 不包含返回 textimage 列的擴展存儲過程。這個行為是從 SQL Server 早期版本變化而來的。



    DEFAULT VALUES



    強制新行包含為每個列所定義的默認值。



    注釋


    INSERT 將新行追加到表中。若要替換表中的數(shù)據(jù),必須在使用 INSERT 裝載新數(shù)據(jù)之前,使用 DELETE 或 TRUNCATE TABLE 語句清除現(xiàn)有的數(shù)據(jù)。若要修改現(xiàn)有行中的列值,請使用 UPDATE。若要創(chuàng)建新表,并且通過一個步驟給它裝載數(shù)據(jù),請使用 SELECT 語句的 INTO 選項。



    table 變量在其作用域內(nèi)可以像常規(guī)表一樣訪問。因此,可以像在 INSERT 語句中將行添加到表一樣使用 table 變量。有關(guān)更多信息,請參見 table。



    由 OPENDATASOURCE 函數(shù)建立的、作為服務(wù)器名部分的四段名稱可以作為表源,該表源可以出現(xiàn)在 INSERT 語句中顯示表名的所有位置。



    使用 uniqueidentifier 數(shù)據(jù)類型創(chuàng)建的列存儲特殊格式的 16 字節(jié)二進制值。與標識列不同,SQL Server 不會為帶有 uniqueidentifier 數(shù)據(jù)類型的列自動地生成值。在插入操作過程中,帶有 uniqueidentifier 數(shù)據(jù)類型的變量以及某些字符串常量可以用于 uniqueidentifier 列(這些字符串常量的形式為:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,有 36 個字符,其中包括連字符。x 是十六進制數(shù),范圍為 0-9 或 a-f。)。例如,對于 uniqueidentifier 變量或列,6F9619FF-8B86-D011-B42D-00C04FC964FF 是一個有效值。使用 NEWID() 函數(shù)可以獲取全局唯一的 ID (GUID)。



    插入行時,可以應(yīng)用下列規(guī)則:


    • 如果將值裝載到帶有 char、varcharvarbinary 數(shù)據(jù)類型的列,尾隨空格(對于 charvarchar 是空格,對于 varbinary 是零)的填充和截斷是由 SET ANSI_PADDING 設(shè)置確定的。該設(shè)置是在創(chuàng)建表時為列定義的。有關(guān)更多信息,請參見 SET ANSI_PADDING。

      下表顯示 SET ANSI_PADDING 為 OFF 時的默認操作。























      數(shù)據(jù)類型默認操作
      Char將帶有空格的值填充到已定義的列寬。
      Varchar刪除最后的非空格字符后面的尾隨空格,而對于只由空格組成的字符串,一直刪除到只留下一個空格字符。
      Varbinary刪除尾隨的零。




    • 如果將一個空字符串 (' ') 裝載到帶有 varchartext 數(shù)據(jù)類型的列,那么默認操作是裝載一個零長度的字符串。如果數(shù)據(jù)庫的兼容級別小于 70,那么將該值轉(zhuǎn)換成單個空格。有關(guān)更多信息,請參見 sp_dbcmptlevel。



    • 如果 INSERT 語句違反約束或規(guī)則,或者它有與列的數(shù)據(jù)類型不兼容的值,那么該語句就會失敗,并且 SQL Server 顯示錯誤信息。



    • 將空值插入到 textimage 列不能創(chuàng)建有效的文本指針,也不能預(yù)分配 8 KB 的文本頁。有關(guān)插入 text image 數(shù)據(jù)的更多信息,請參見使用 text、ntext 和 image 函數(shù)。



    • 如果 INSERT 正在使用 SELECT 或 EXECUTE 裝載多行,正在裝載的值中出現(xiàn)任何違反規(guī)則或約束的行為都會導(dǎo)致整個語句終止,從而不會裝載任何行。



    • 當向遠程 SQL Server 表中插入值且沒有為所有列指定值時,則用戶必須標識將向其中插入指定值的列。



    在本地和遠程分區(qū)視圖上,忽略 INSERT 語句的 SET ROWCOUNT 選項的設(shè)置。而且,當兼容級別設(shè)置為 80 時,在 SQL Server 2000 中的遠程表上也不支持 INSERT 語句的 SET ROWCOUNT 選項。



    當為表或視圖的 INSERT 操作定義了 INSTEAD-OF 觸發(fā)器時,該觸發(fā)器就會執(zhí)行 INSERT 語句中的 instead of。以前的 SQL Server 版本只支持在 INSERT 中定義的 AFTER 觸發(fā)器,以及其它數(shù)據(jù)修改語句。



    如果在表達式賦值過程中 INSERT 語句遇到算術(shù)錯誤(溢出、被零除或域錯誤),那么 SQL Server 會處理這些錯誤,就好像 SET ARITHABORT 是 ON 一樣。批處理的其余部分將終止,并且會返回一條錯誤信息。



    權(quán)限


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



    示例


    A. 使用簡單的 INSERT


    下面的示例創(chuàng)建表 T1,并且插入一行。



    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME = 'T1')
      DROP TABLE T1
    GO
    CREATE TABLE T1 ( column_1 int, column_2 varchar(30))
    INSERT T1 VALUES (1, 'Row #1')


    B. 插入與列順序不同的數(shù)據(jù)


    下面的示例使用 column_list 及 VALUES 列表顯式地指定將被插入每個列的值。



    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME = 'T1')
      DROP TABLE T1
    GO
    CREATE TABLE T1 ( column_1 int, column_2 varchar(30))
    INSERT T1 (column_2, column_1) VALUES ('Row #1',1)


    C. 插入值少于列個數(shù)的數(shù)據(jù)


    下面的示例創(chuàng)建一個帶有四個列的表。INSERT 語句插入一些行,這些行只有部分列包含值。



    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME = 'T1')
      DROP TABLE T1
    GO
    CREATE TABLE T1
    ( column_1 int identity,
    column_2 varchar(30)
      CONSTRAINT default_name DEFAULT ('column default'),
    column_3 int NULL,
    column_4 varchar(40)
    )
    INSERT INTO T1 (column_4)
      VALUES ('Explicit value')
    INSERT INTO T1 (column_2,column_4)
      VALUES ('Explicit value', 'Explicit value')
    INSERT INTO T1 (column_2,column_3,column_4)
      VALUES ('Explicit value',-44,'Explicit value')
    SELECT *
    FROM T1


    D. 將數(shù)據(jù)裝載到帶有標識列的表


    前兩個 INSERT 語句允許為新行生成標識值。第三個 INSERT 語句用 SET IDENTITY_INSERT 語句替代列的 IDENTITY 屬性,并且將一個顯式的值插入到標識列。



    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME = 'T1')
      DROP TABLE T1
    GO
    CREATE TABLE T1 ( column_1 int IDENTITY, column_2 varchar(30))
    INSERT T1 VALUES ('Row #1')
    INSERT T1 (column_2) VALUES ('Row #2')
    SET IDENTITY_INSERT T1 ON
    INSERT INTO T1 (column_1,column_2)
      VALUES (-99,'Explicit identity value')
    SELECT *
    FROM T1


    E. 通過視圖將數(shù)據(jù)裝載到表


    在下面的示例中,INSERT 語句指定一個視圖名;但是將新行插入該視圖的基礎(chǔ)表中。INSERT 語句中 VALUES 列表的順序必須與視圖的列順序相匹配。



    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME = 'T1')
      DROP TABLE T1
    GO
    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
        WHERE TABLE_NAME = 'V1')
      DROP VIEW V1
    GO
    CREATE TABLE T1 ( column_1 int, column_2 varchar(30))
    GO
    CREATE VIEW V1 AS SELECT column_2, column_1
    FROM T1
    GO
    INSERT INTO V1
      VALUES ('Row 1',1)
    SELECT *
    FROM T1


    F. 使用 DEFAULT VALUES 選項裝載數(shù)據(jù)


    在下面的示例中,CREATE TABLE 語句給每個列定義一個值,當在 INSERT 語句中沒有為列指定顯式的值時,就可以使用這個值。使用 INSERT 語句的 DEFAULT VALUES 選項,無須提供顯式的值就可以添加行。



    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME = 'T1')
      DROP TABLE T1
    GO
    CREATE DEFAULT bound_default AS 'Bound default value'
    GO
    CREATE TABLE T1
    ( column_1 int identity,
    column_2 varchar(30)
      CONSTRAINT default_name DEFAULT ('column default'),
    column_3 timestamp,
    column_4 varchar(30),
    column_5 int NULL)
    GO
    USE master
    EXEC sp_bindefault 'bound_default','T1.column_4'
    INSERT INTO T1 DEFAULT VALUES
    SELECT *
    FROM T1


    G. 使用 SELECT 和 EXECUTE 選項裝載數(shù)據(jù)


    下面的示例演示三種不同的方法,用來從一個表獲取數(shù)據(jù),并將數(shù)據(jù)裝載到另一個表。每種方法都基于一個多表 SELECT 語句,該語句在列列表中包含一個表達式及一個文字值。



    第一個 INSERT 語句使用一個 SELECT 語句直接從源表 (authors) 檢索數(shù)據(jù),并且將結(jié)果集存儲到 author_sales 表。第二個 INSERT 執(zhí)行一個包含 SELECT 語句的過程,而第三個 INSERT 將 SELECT 語句作為一個文字字符串執(zhí)行。



    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME = 'author_sales')
      DROP TABLE author_sales
    GO
    IF EXISTS(SELECT name FROM sysobjects
        WHERE name = 'get_author_sales' AND type = 'P')
      DROP PROCEDURE get_author_sales
    GO
    USE pubs
    CREATE TABLE author_sales
    ( data_source   varchar(20),
    au_id       varchar(11),
    au_lname     varchar(40),
    sales_dollars smallmoney
    )
    GO
    CREATE PROCEDURE get_author_sales
    AS
      SELECT 'PROCEDURE', authors.au_id, authors.au_lname,
        SUM(titles.price * sales.qty)
      FROM authors INNER JOIN titleauthor
        ON authors.au_id = titleauthor.au_id INNER JOIN titles
        ON titleauthor.title_id = titles.title_id INNER JOIN sales
        ON titles.title_id = sales.title_id
      WHERE authors.au_id like '8%'
      GROUP BY authors.au_id, authors.au_lname
    GO
    --INSERT...SELECT example
    USE pubs
    INSERT author_sales
      SELECT 'SELECT', authors.au_id, authors.au_lname,
        SUM(titles.price * sales.qty)
      FROM authors INNER JOIN titleauthor
        ON authors.au_id = titleauthor.au_id INNER JOIN titles
        ON titleauthor.title_id = titles.title_id INNER JOIN sales
        ON titles.title_id = sales.title_id
      WHERE authors.au_id LIKE '8%'
      GROUP BY authors.au_id, authors.au_lname

    --INSERT...EXECUTE procedure example
    INSERT author_sales EXECUTE get_author_sales

    --INSERT...EXECUTE('string') example
    INSERT author_sales
    EXECUTE
    ('
    SELECT ''EXEC STRING'', authors.au_id, authors.au_lname,
      SUM(titles.price * sales.qty)
      FROM authors INNER JOIN titleauthor
        ON authors.au_id = titleauthor.au_id INNER JOIN titles
        ON titleauthor.title_id = titles.title_id INNER JOIN sales
        ON titles.title_id = sales.title_id
      WHERE authors.au_id like ''8%''
      GROUP BY authors.au_id, authors.au_lname
    ')

    --Show results.
    SELECT * FROM author_sales


    H. 使用 SELECT 語句中的 TOP 子句插入數(shù)據(jù)


    因為可以在 INSERT 語句中指定 SELECT 語句,所以也可以將 TOP 子句用在 SELECT 語句中。下面的示例將 authors 表中最上面的 10 個作者插入到名為 new_authors 的新表中。



    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME = 'new_authors')
      DROP TABLE new_authors
    GO
    USE pubs
    CREATE TABLE new_authors
    (
    au_id   id,
    au_lname varchar(40),
    au_fname varchar(20),
    phone   char(12),
    address varchar(40),
    city   varchar(20),  
    state   char(2),
    zip       char(5),
    contract bit
    )
    INSERT INTO new_authors
    SELECT TOP 10 *
    FROM authors
    相關(guān)文章
    本頁查看次數(shù):