隨筆 - 4  文章 - 10  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          這個(gè)資料是我上大學(xué)時(shí)候一直看到現(xiàn)在的, 既可以作為學(xué)習(xí)資料, 更可以作為開(kāi)發(fā)時(shí)候的速查手冊(cè). 具體來(lái)說(shuō)就是安裝了 SQL Server 2000 后里面自帶的幫助文檔的一部分.

          可以下載這個(gè)壓縮包(限Windows平臺(tái)): http://beansoft.java-cn.org/download/tsqlref.zip 2.1MB CHM 格式, 有索引, 可搜索

          那么這個(gè)資料的好處是什么呢?

          1) 全中文

          2) 語(yǔ)法特別詳細(xì)(當(dāng)然部分是 MS 特有的, 不太好).. 這里可以帶個(gè)例子給大家看:

           

          Transact-SQL 參考

          INSERT

          將新行添加到表或視圖。

          語(yǔ)法

          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]

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

          table_name

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

          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

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

          rowset_function_limited

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

          (column_list)

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

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

          • 具有 IDENTITY 屬性。使用下一個(gè)增量標(biāo)識(shí)值。
          • 有默認(rèn)值。使用列的默認(rèn)值。
          • 具有 timestamp 數(shù)據(jù)類型。使用當(dāng)前的時(shí)間戳值。
          • 是可空的。使用空值。

          當(dāng)向標(biāo)識(shí)列中插入顯式的值時(shí),必須使用 column_list 及 VALUES 列表,并且對(duì)于表,SET IDENTITY_INSERT 選項(xiàng)必須是 ON。

          VALUES

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

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

          DEFAULT

          強(qiáng)制 SQL Server 裝載為列定義的默認(rèn)值。如果對(duì)于某列并不存在默認(rèn)值,并且該列允許 NULL,那么就插入 NULL。對(duì)于使用 timestamp 數(shù)據(jù)類型定義的列,插入下一個(gè)時(shí)間戳值。DEFAULT 對(duì)標(biāo)識(shí)列無(wú)效。

          expression

          一個(gè)常量、變量或表達(dá)式。表達(dá)式不能包含 SELECT 或 EXECUTE 語(yǔ)句。

          derived_table

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

          execute_statement

          任何有效的 EXECUTE 語(yǔ)句,它使用 SELECT 或 READTEXT 語(yǔ)句返回?cái)?shù)據(jù)。

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

          說(shuō)明  對(duì)于 SQL Server 7.0,execute_statement 不包含返回 textimage 列的擴(kuò)展存儲(chǔ)過(guò)程。這個(gè)行為是從 SQL Server 早期版本變化而來(lái)的。

          DEFAULT VALUES

          強(qiáng)制新行包含為每個(gè)列所定義的默認(rèn)值。

          注釋

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

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

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

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

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

          • 如果將值裝載到帶有 charvarcharvarbinary 數(shù)據(jù)類型的列,尾隨空格(對(duì)于 charvarchar 是空格,對(duì)于 varbinary 是零)的填充和截?cái)嗍怯?SET ANSI_PADDING 設(shè)置確定的。該設(shè)置是在創(chuàng)建表時(shí)為列定義的。有關(guān)更多信息,請(qǐng)參見(jiàn) SET ANSI_PADDING

            下表顯示 SET ANSI_PADDING 為 OFF 時(shí)的默認(rèn)操作。

            數(shù)據(jù)類型
            默認(rèn)操作

            Char
            將帶有空格的值填充到已定義的列寬。

            Varchar
            刪除最后的非空格字符后面的尾隨空格,而對(duì)于只由空格組成的字符串,一直刪除到只留下一個(gè)空格字符。

            Varbinary
            刪除尾隨的零。

          • 如果將一個(gè)空字符串 (' ') 裝載到帶有 varchartext 數(shù)據(jù)類型的列,那么默認(rèn)操作是裝載一個(gè)零長(zhǎng)度的字符串。如果數(shù)據(jù)庫(kù)的兼容級(jí)別小于 70,那么將該值轉(zhuǎn)換成單個(gè)空格。有關(guān)更多信息,請(qǐng)參見(jiàn) sp_dbcmptlevel
          • 如果 INSERT 語(yǔ)句違反約束或規(guī)則,或者它有與列的數(shù)據(jù)類型不兼容的值,那么該語(yǔ)句就會(huì)失敗,并且 SQL Server 顯示錯(cuò)誤信息。
          • 將空值插入到 textimage 列不能創(chuàng)建有效的文本指針,也不能預(yù)分配 8 KB 的文本頁(yè)。有關(guān)插入 text image 數(shù)據(jù)的更多信息,請(qǐng)參見(jiàn)使用 text、ntext 和 image 函數(shù)
          • 如果 INSERT 正在使用 SELECT 或 EXECUTE 裝載多行,正在裝載的值中出現(xiàn)任何違反規(guī)則或約束的行為都會(huì)導(dǎo)致整個(gè)語(yǔ)句終止,從而不會(huì)裝載任何行。
          • 當(dāng)向遠(yuǎn)程 SQL Server 表中插入值且沒(méi)有為所有列指定值時(shí),則用戶必須標(biāo)識(shí)將向其中插入指定值的列。

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

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

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

          權(quán)限

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

          示例
          A. 使用簡(jiǎn)單的 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 列表顯式地指定將被插入每個(gè)列的值。

          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. 插入值少于列個(gè)數(shù)的數(shù)據(jù)

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

          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ù)裝載到帶有標(biāo)識(shí)列的表

          前兩個(gè) INSERT 語(yǔ)句允許為新行生成標(biāo)識(shí)值。第三個(gè) INSERT 語(yǔ)句用 SET IDENTITY_INSERT 語(yǔ)句替代列的 IDENTITY 屬性,并且將一個(gè)顯式的值插入到標(biāo)識(shí)列。

          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. 通過(guò)視圖將數(shù)據(jù)裝載到表

          在下面的示例中,INSERT 語(yǔ)句指定一個(gè)視圖名;但是將新行插入該視圖的基礎(chǔ)表中。INSERT 語(yǔ)句中 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 選項(xiàng)裝載數(shù)據(jù)

          在下面的示例中,CREATE TABLE 語(yǔ)句給每個(gè)列定義一個(gè)值,當(dāng)在 INSERT 語(yǔ)句中沒(méi)有為列指定顯式的值時(shí),就可以使用這個(gè)值。使用 INSERT 語(yǔ)句的 DEFAULT VALUES 選項(xiàng),無(wú)須提供顯式的值就可以添加行。

          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 選項(xiàng)裝載數(shù)據(jù)

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

          第一個(gè) INSERT 語(yǔ)句使用一個(gè) SELECT 語(yǔ)句直接從源表 (authors) 檢索數(shù)據(jù),并且將結(jié)果集存儲(chǔ)到 author_sales 表。第二個(gè) INSERT 執(zhí)行一個(gè)包含 SELECT 語(yǔ)句的過(guò)程,而第三個(gè) INSERT 將 SELECT 語(yǔ)句作為一個(gè)文字字符串執(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 語(yǔ)句中的 TOP 子句插入數(shù)據(jù)

          因?yàn)榭梢栽?INSERT 語(yǔ)句中指定 SELECT 語(yǔ)句,所以也可以將 TOP 子句用在 SELECT 語(yǔ)句中。下面的示例將 authors 表中最上面的 10 個(gè)作者插入到名為 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
          
          請(qǐng)參見(jiàn)

          CREATE TABLE

          EXECUTE

          FROM

          IDENTITY(屬性)

          NEWID

          SELECT

          SET ROWCOUNT

          posted on 2007-08-13 13:07 冬天出走的豬 閱讀(301) 評(píng)論(0)  編輯  收藏 所屬分類: Database
          主站蜘蛛池模板: 无棣县| 张北县| 洪雅县| 应用必备| 吉安县| 安徽省| 延寿县| 江油市| 武冈市| 白水县| 时尚| 沽源县| 肃宁县| 平阳县| 定陶县| 清丰县| 惠来县| 会泽县| 麻江县| 茂名市| 中山市| 昌图县| 托里县| 梓潼县| 湖口县| 鹤岗市| 温宿县| 吴川市| 怀来县| 寻乌县| 资中县| 井陉县| 罗山县| 民勤县| 如皋市| 荔浦县| 会理县| 留坝县| 丘北县| 安岳县| 尚义县|