![sql的insert語(yǔ)句功能非常強(qiáng)大_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/896cdf81-d540-4dbc-bea1-2a7a5b928680/896cdf81-d540-4dbc-bea1-2a7a5b9286801.gif)
![sql的insert語(yǔ)句功能非常強(qiáng)大_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/896cdf81-d540-4dbc-bea1-2a7a5b928680/896cdf81-d540-4dbc-bea1-2a7a5b9286802.gif)
![sql的insert語(yǔ)句功能非常強(qiáng)大_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/896cdf81-d540-4dbc-bea1-2a7a5b928680/896cdf81-d540-4dbc-bea1-2a7a5b9286803.gif)
![sql的insert語(yǔ)句功能非常強(qiáng)大_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/896cdf81-d540-4dbc-bea1-2a7a5b928680/896cdf81-d540-4dbc-bea1-2a7a5b9286804.gif)
![sql的insert語(yǔ)句功能非常強(qiáng)大_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/896cdf81-d540-4dbc-bea1-2a7a5b928680/896cdf81-d540-4dbc-bea1-2a7a5b9286805.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、INSERT (Transact-SQL將一個(gè)或更多新行添加到表或視圖中。Transact-SQL 語(yǔ)法約定語(yǔ)法 WITH ,.n INSERT TOP ( expression PERCENT INTO <object> | rowset_function_limited WITH ( <Table_Hint_Limited>
2、.n ( column_list <OUTPUT Clause> VALUES ( DEFAULT | NULL | expression ,.n ,.n | derived_table | execute_statement | <dml_table_source> &
3、#160; | DEFAULT VALUES ; <object> := server_name . database_name . schema_name . | database_name . schema_name . | schema_name .
4、60; table_or_view_name<dml_table_source> :=SELECT <select_list>FROM ( <dml_statement_with_output_clause> AS t
5、able_alias ( column_alias ,.n WHERE <search_condition> OPTION ( <query_hint> ,.n 參數(shù)WITH 指定在 INSERT 語(yǔ)句作用域內(nèi)定義的臨時(shí)命名結(jié)果集(也稱為公用表表達(dá)式)。結(jié)果集源自 SELECT 語(yǔ)句。公用表表達(dá)式還可以與 SELECT、DELETE、UPDATE 和 CREATE VIEW 語(yǔ)句一起使用。有關(guān)詳細(xì)信息,請(qǐng)參閱WITH common_table_expression (Transact-SQL。TOP ( expressi
6、on PERCENT 指定將插入的隨機(jī)行的數(shù)目或百分比。expression 可以是行數(shù)或行的百分比。在和 INSERT、UPDATE 或 DELETE 語(yǔ)句結(jié)合使用的 TOP 表達(dá)式中引用的行不按任何順序排列。在 INSERT、UPDATE 和 DELETE 語(yǔ)句中,需要使用圓括號(hào)分隔 TOP 中的 expression。有關(guān)詳細(xì)信息,請(qǐng)參閱 TOP (Transact-SQL。INTO 一個(gè)可選的關(guān)鍵字,可以將它用在 INSERT 和目標(biāo)表之間。server_name 表或視圖所在服務(wù)器的名稱(將 OPENDATASOURCE 函數(shù)用作服務(wù)器名稱)。如果指定了 server_name,則需
7、要 database_name 和 schema_name。database_name 數(shù)據(jù)庫(kù)的名稱。schema_name 表或視圖所屬架構(gòu)的名稱。table_or view_name 要接收數(shù)據(jù)的表或視圖的名稱。table 變量在其作用域內(nèi)可用作 INSERT 語(yǔ)句中的表源。table_or_view_name 引用的視圖必須可更新,并且只在該視圖的 FROM 子句中引用一個(gè)基表。例如,多表視圖中的 INSERT 必須使用只引用一個(gè)基表中的各列的 column_list。有關(guān)可更新視圖的詳細(xì)信息,請(qǐng)參閱 CREATE VIEW (Transact-SQL。rowset_function_l
8、imited OPENQUERY 或 OPENROWSET 函數(shù)。WITH ( <table_hint_limited> . n 指定目標(biāo)表允許的一個(gè)或多個(gè)表提示。需要有 WITH 關(guān)鍵字和括號(hào)。不允許 READPAST、NOLOCK 和 READUNCOMMITTED。有關(guān)表提示的詳細(xì)信息,請(qǐng)參閱表提示 (Transact-SQL。重要提示:在將來(lái)的 SQL Server 版本中,將刪除對(duì)作為 INSERT 語(yǔ)句目標(biāo)的表指定 HOLDLOCK、SERIALIZABLE、READCOMMITTED、REPEATABLEREAD 或 UPDLOCK 提示的功能。這些提示不影響 INS
9、ERT 語(yǔ)句的性能。請(qǐng)避免在新的開(kāi)發(fā)工作中使用該功能,并計(jì)劃修改當(dāng)前使用該功能的應(yīng)用程序。 對(duì)作為 INSERT 語(yǔ)句目標(biāo)的表指定 TABLOCK 提示與指定 TABLOCKX 提示具有相同的效果。對(duì)表采用排他鎖。( column_list 要在其中插入數(shù)據(jù)的一列或多列的列表。必須用括號(hào)將 column_list 括起來(lái),并且用逗號(hào)進(jìn)行分隔。如果某列不在 column_list 中,則數(shù)據(jù)庫(kù)引擎必須能夠基于該列的定義提供一個(gè)值;否則不能加載行。如果列滿足下面的條件,則數(shù)據(jù)庫(kù)引擎將自動(dòng)為列提供值: 具有 IDENTITY 屬性。使用下一個(gè)增量標(biāo)識(shí)值。 有默認(rèn)值。使用列的默認(rèn)值。 具有 times
10、tamp 數(shù)據(jù)類型。使用當(dāng)前的時(shí)間戳值。 可以為 Null。使用 Null 值。 是計(jì)算列。使用計(jì)算值。當(dāng)向標(biāo)識(shí)列中插入顯式值時(shí),必須使用 column_list 和 VALUES 列表,并且表的 SET IDENTITY_INSERT 選項(xiàng)必須為 ON。OUTPUT 子句 將插入行作為插入操作的一部分返回。引用本地分區(qū)視圖、分布式分區(qū)視圖或遠(yuǎn)程表的 DML 語(yǔ)句或包含 execute_statement 的 INSERT 語(yǔ)句都不支持 OUTPUT 子句。在包含 <dml_table_source> 子句的 INSERT 語(yǔ)句中不支持 OUTPUT INTO 子句。VALUES
11、引入要插入的數(shù)據(jù)值的一個(gè)或多個(gè)列表。對(duì)于 column_list(如果已指定)或表中的每個(gè)列,都必須有一個(gè)數(shù)據(jù)值。必須用圓括號(hào)將值列表括起來(lái)。如果 VALUES 列表中的各值與表中各列的順序不相同,或者未包含表中各列的值,則必須使用 column_list 顯式指定存儲(chǔ)每個(gè)傳入值的列。SQL Server 2008 引入了 Transact-SQL 行構(gòu)造函數(shù)(又稱為表值構(gòu)造函數(shù)),用于在一個(gè) INSERT 語(yǔ)句中指定多個(gè)行。行構(gòu)造函數(shù)包含一個(gè) VALUES 子句和多個(gè)括在圓括號(hào)中且以逗號(hào)分隔的值列表。請(qǐng)參見(jiàn)下面“示例”部分中的“示例 B”。若要插入多行值,VALUES 列表的順序必須與表中各
12、列的順序相同,且此列表必須包含與表中各列或 column_list 對(duì)應(yīng)的值以便顯式指定存儲(chǔ)每個(gè)傳入值的列。在多行 INSERT 語(yǔ)句中指定的值遵循 UNION ALL 語(yǔ)法的類型轉(zhuǎn)換屬性。這樣,不匹配的類型可以隱式轉(zhuǎn)換為具有更高優(yōu)先級(jí)的類型。如果此轉(zhuǎn)換不是所支持的隱式轉(zhuǎn)換,則返回錯(cuò)誤。例如,以下語(yǔ)句將整數(shù)值和字符值插入到類型為 char 的列中。CREATE TABLE t (a int, b char;GOINSERT INTO t VALUES (1,'a', (2, 1;GO運(yùn)行 INSERT 語(yǔ)句時(shí),SQL Server 嘗試將 'a' 轉(zhuǎn)換為整數(shù),因
13、為數(shù)據(jù)類型優(yōu)先級(jí)指示整數(shù)類型的優(yōu)先級(jí)高于字符。轉(zhuǎn)換失敗,并且返回錯(cuò)誤。您可以根據(jù)需要顯式轉(zhuǎn)換值,從而避免發(fā)生此錯(cuò)誤。例如,前面的語(yǔ)句可以編寫(xiě)為:INSERT INTO t VALUES (1,'a', (2, CONVERT(CHAR,1;可在單個(gè) INSERT 語(yǔ)句中插入的最大行數(shù)為 1000。若要插入超過(guò) 1000 行的數(shù)據(jù),請(qǐng)創(chuàng)建多個(gè) INSERT 語(yǔ)句,或通過(guò)使用 bcp 實(shí)用工具或 BULK INSERT 語(yǔ)句大容量導(dǎo)入數(shù)據(jù)。DEFAULT 強(qiáng)制數(shù)據(jù)庫(kù)引擎加載為列定義的默認(rèn)值。如果某列并不存在默認(rèn)值,并且該列允許 Null 值,則插入 NULL。對(duì)于使用 timest
14、amp 數(shù)據(jù)類型定義的列,插入下一個(gè)時(shí)間戳值。DEFAULT 對(duì)標(biāo)識(shí)列無(wú)效。expression 一個(gè)常量、變量或表達(dá)式。表達(dá)式不能包含 EXECUTE 語(yǔ)句。注意:當(dāng)引用 Unicode 字符數(shù)據(jù)類型 nchar、nvarchar 和 ntext 時(shí),'expression' 應(yīng)采用大寫(xiě)字母 'N' 作為前綴。如果未指定 'N',則 SQL Server 會(huì)將字符串轉(zhuǎn)換為與數(shù)據(jù)庫(kù)或列的默認(rèn)排序規(guī)則相對(duì)應(yīng)的代碼頁(yè)。此代碼頁(yè)中沒(méi)有的字符都將丟失。 derived_table 任何有效的 SELECT 語(yǔ)句,它返回將加載到表中的數(shù)據(jù)行。SELECT
15、語(yǔ)句不能包含公用表表達(dá)式 (CTE。execute_statement 任何有效的 EXECUTE 語(yǔ)句,它使用 SELECT 或 READTEXT 語(yǔ)句返回?cái)?shù)據(jù)。如果 execute_statement 使用 INSERT,則每個(gè)結(jié)果集必須與表或 column_list 中的列兼容??梢允褂?execute_statement 對(duì)同一服務(wù)器或遠(yuǎn)程服務(wù)器執(zhí)行存儲(chǔ)過(guò)程。執(zhí)行遠(yuǎn)程服務(wù)器中的過(guò)程,并將結(jié)果集返回到本地服務(wù)器并加載到本地服務(wù)器的表中。在分布式事務(wù)中,當(dāng)連接啟用了多個(gè)活動(dòng)結(jié)果集 (MARS 時(shí),無(wú)法針對(duì)環(huán)回鏈接服務(wù)器發(fā)出 execute_statement。如果 execute_stat
16、ement 使用 READTEXT 語(yǔ)句返回?cái)?shù)據(jù),則每個(gè) READTEXT 語(yǔ)句最多可以返回 1 MB (1024 KB 的數(shù)據(jù)。execute_statement 還可以用于擴(kuò)展過(guò)程。execute_statement 插入由擴(kuò)展過(guò)程的主線程返回的數(shù)據(jù),但不插入主線程以外的線程的輸出。<dml_table_source> 指定插入目標(biāo)表的行是 INSERT、UPDATE、DELETE 或 MERGE 語(yǔ)句的 OUTPUT 子句返回的行;可以通過(guò) WHERE 子句對(duì)行進(jìn)行篩選。如果指定了 <dml_table_source>,外部 INSERT 語(yǔ)句的目標(biāo)必須滿足以下限
17、制: 必須是基表而不是視圖。 不能是遠(yuǎn)程表。 不能對(duì)其定義任何觸發(fā)器。 不能參與任何主鍵-外鍵關(guān)系。 不能參與合并復(fù)制或事務(wù)復(fù)制的可更新訂閱。數(shù)據(jù)庫(kù)的兼容級(jí)別必須設(shè)置為 100。有關(guān)詳細(xì)信息,請(qǐng)參閱下面“備注”下的“從 OUTPUT 子句插入”。<select_list> 指定要插入 OUTPUT 子句返回的哪些列的逗號(hào)分隔列表。<select_list> 中的列必須與要插入值的列兼容。<select_list> 無(wú)法引用聚合函數(shù)或 TEXTPTR。注意:無(wú)論在 <dml_statement_with_output_clause> 中對(duì) SELE
18、CT 列表中列出的任何變量做何種更改,這些變量都將引用其原始值。 <dml_statement_with_output_clause> 在 OUTPUT 子句中返回受影響行的有效 INSERT、UPDATE、DELETE 或 MERGE 語(yǔ)句。語(yǔ)句中不能包含 WITH 子句,且不能以遠(yuǎn)程表或分區(qū)視圖為目標(biāo)。如果指定了 UPDATE 或 DELETE,則所指定的 UPDATE 或 DELETE 不能是基于游標(biāo)的。源行不能作為嵌套的 DML 語(yǔ)句進(jìn)行引用。WHERE <search_condition> 任意 WHERE 子句,其中包含對(duì) <dml_statement
19、_with_output_clause> 返回的行進(jìn)行篩選的有效 <search_condition>。有關(guān)詳細(xì)信息,請(qǐng)參閱 搜索條件 (Transact-SQL。在此上下文中使用時(shí),<search_condition> 不能包含子查詢、執(zhí)行數(shù)據(jù)訪問(wèn)的標(biāo)量用戶定義函數(shù)、聚合函數(shù)、TEXTPTR 或全文搜索謂詞。DEFAULT VALUES 強(qiáng)制新行包含為每個(gè)列定義的默認(rèn)值。備注INSERT 將新行追加到表中。若要替換表中的數(shù)據(jù),必須在使用 INSERT 加載新數(shù)據(jù)之前,使用 DELETE 或 TRUNCATE TABLE 語(yǔ)句清除現(xiàn)有的數(shù)據(jù)。若要修改現(xiàn)有行中的列值
20、,請(qǐng)使用 UPDATE。可以創(chuàng)建新表,并使用 SELECT 語(yǔ)句的 INTO 選項(xiàng)通過(guò)一個(gè)步驟為它加載數(shù)據(jù)。使用 uniqueidentifier 數(shù)據(jù)類型創(chuàng)建的列存儲(chǔ)特殊格式的 16 位二進(jìn)制值。與標(biāo)識(shí)列不同,數(shù)據(jù)庫(kù)引擎不為 uniqueidentifier 數(shù)據(jù)類型的列自動(dòng)生成值。在插入操作過(guò)程中,可以將 uniqueidentifier 數(shù)據(jù)類型的變量和 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 格式的字符串常量(包括連字符在內(nèi)共 36 個(gè)字符,其中 x 表示從 0 到 9 或從 a 到 f 的十六進(jìn)制數(shù)字)用于 uniqueidentifier 列。例如
21、,6F9619FF-8B86-D011-B42D-00C04FC964FF 是 uniqueidentifier 變量或列的有效值。使用 NEWID( 函數(shù)獲取全局唯一 ID (GUID。在本地和遠(yuǎn)程分區(qū)視圖上,忽略 INSERT 語(yǔ)句的 SET ROWCOUNT 選項(xiàng)的設(shè)置。此外,當(dāng)兼容級(jí)別設(shè)置為 80 或更高時(shí),對(duì)于針對(duì)數(shù)據(jù)庫(kù)引擎中的遠(yuǎn)程表發(fā)出的 INSERT 語(yǔ)句也不支持此選項(xiàng)。如果在表達(dá)式計(jì)算過(guò)程中 INSERT 語(yǔ)句遇到算術(shù)錯(cuò)誤(溢出、被零除或域錯(cuò)誤),則數(shù)據(jù)庫(kù)引擎會(huì)處理這些錯(cuò)誤,就好像 SET ARITHABORT 設(shè)置為 ON 一樣。停止批處理的其余部分,并返回一條錯(cuò)誤消息。盡管
22、不允許在表達(dá)式列表中使用涉及多個(gè)列的子查詢,但允許在表達(dá)式列表中使用單個(gè)標(biāo)量值。下面的代碼將會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤。/* This statement causes an error*/ INSERT INTO Employees VALUES ('Marjorie', 25, 5, ('Christina', 30, 6, ( SELECT Name, Age, 1 FROM People; 插
23、入行的規(guī)則插入行時(shí),可以應(yīng)用下列規(guī)則:1、如果將值加載到 char、varchar 或 varbinary 數(shù)據(jù)類型的列中,則尾隨空格(對(duì)于 char 和 varchar 為空格,對(duì)于 varbinary 為零)的填充或截?cái)嘤蓜?chuàng)建表時(shí)為該列定義的 SET ANSI_PADDING 設(shè)置確定。有關(guān)詳細(xì)信息,請(qǐng)參閱 SET ANSI_PADDING (Transact-SQL。下表顯示了 SET ANSI_PADDING OFF 的默認(rèn)操作。數(shù)據(jù)類型 默認(rèn)操作 char 將帶有空格的值填充到已定義的列寬。varchar 刪除最后的非空格字符后面的尾隨空格,而對(duì)于只由空格組成的字符串,一直刪除到只留
24、下一個(gè)空格。varbinary 刪除尾隨的零。2、如果將一個(gè)空字符串 (' ' 加載到數(shù)據(jù)類型為 varchar 或 text 的列,則默認(rèn)操作是加載一個(gè)零長(zhǎng)度的字符串。3、如果 INSERT 語(yǔ)句違反約束或規(guī)則,或者包含與列的數(shù)據(jù)類型不兼容的值,則該語(yǔ)句將失敗,并且數(shù)據(jù)庫(kù)引擎顯示錯(cuò)誤消息。4、將 Null 值插入到 text 或 image 列不創(chuàng)建有效的文本指針,也不預(yù)分配 8 KB 的文本頁(yè)。有關(guān)插入 text 和 image 數(shù)據(jù)的詳細(xì)信息,請(qǐng)參閱使用 text、ntext 和 image 函數(shù)。5、如果 INSERT 是使用 SELECT 或 EXECUTE 加載多行
25、,那么一旦加載的值中出現(xiàn)任何違反規(guī)則或約束的情況,就會(huì)導(dǎo)致終止整個(gè)語(yǔ)句,且不會(huì)加載任何行。6、當(dāng)向遠(yuǎn)程數(shù)據(jù)庫(kù)引擎實(shí)例的表中插入值且沒(méi)有為所有列指定所有值時(shí),用戶必須標(biāo)識(shí)將向其中插入指定值的列。對(duì) INSERT 操作使用 INSTEAD OF 觸發(fā)器當(dāng)為表或視圖的 INSERT 操作定義了 INSTEAD OF 觸發(fā)器時(shí),則執(zhí)行該觸發(fā)器而不是 INSERT 語(yǔ)句。SQL Server 的早期版本只支持在 INSERT 和其他數(shù)據(jù)修改語(yǔ)句上定義的 AFTER 觸發(fā)器。有關(guān) INSTEAD OF 觸發(fā)器的詳細(xì)信息,請(qǐng)參閱 CREATE TRIGGER (Transact-SQL。將值插入到用戶定義類
26、型列中可以通過(guò)以下方法將值插入到用戶定義的類型列中: 提供用戶定義類型的值。 提供 SQL Server 系統(tǒng)數(shù)據(jù)類型的值,條件是該用戶定義類型支持該類型的隱式轉(zhuǎn)換或顯式轉(zhuǎn)換。下面的示例演示了如何基于字符串進(jìn)行顯式轉(zhuǎn)換將值插入到用戶定義的類型 Point 的列中。INSERT INTO Cities (LocationVALUES ( CONVERT(Point, '12.3:46.2' ; 由于所有用戶定義的類型可以從二進(jìn)制值進(jìn)行隱式轉(zhuǎn)換,因此還可以在不執(zhí)行顯式轉(zhuǎn)換的情況下提供二進(jìn)制值。有關(guān)轉(zhuǎn)換和用戶定義類型的詳細(xì)信息,請(qǐng)參閱對(duì)用戶定義類型執(zhí)行操作。調(diào)用一個(gè)用戶定義函數(shù),該函
27、數(shù)返回用戶定義類型的值。下面的示例使用用戶定義函數(shù) CreateNewPoint( 創(chuàng)建一個(gè)用戶定義類型 Point 的新值,并將該值插入到 Cities 表中。INSERT INTO Cities (LocationVALUES ( dbo.CreateNewPoint(x, y ;使用 OPENROWSET 和 BULK 大容量加載數(shù)據(jù)OPENROWSET 大容量行集提供程序附帶的表提示通過(guò) INSERT 語(yǔ)句實(shí)現(xiàn)了以下大容量加載優(yōu)化: 大容量加載日志記錄。(TABLOCK 提示可以最大限度減少插入操作的日志記錄數(shù)量。) 可以將約束檢查設(shè)置為 ON 或 OFF。 可以將觸發(fā)器執(zhí)行設(shè)置為 O
28、N 或 OFF。這些優(yōu)化類似于可與 BULK INSERT 命令一起使用的優(yōu)化。如果數(shù)據(jù)庫(kù)的恢復(fù)模式設(shè)置為簡(jiǎn)單或大容量日志記錄,并且未在復(fù)制中使用該表,便有可能使用帶有 INSERT 語(yǔ)句的 OPENROWSET 大容量行集提供程序按最小方式記錄日志。有關(guān)詳細(xì)信息,請(qǐng)參閱 在大容量導(dǎo)入中按最小方式記錄日志的前提條件。將從 OUTPUT 子句返回的數(shù)據(jù)插入目標(biāo)表您可以捕獲嵌套 INSERT、UPDATE、DELETE 或 MERGE 語(yǔ)句中 OUTPUT 子句的結(jié)果,然后將這些結(jié)果插入目標(biāo)表中。這通過(guò)使用語(yǔ)法中的 <dml_table_source> 參數(shù)來(lái)實(shí)現(xiàn)。執(zhí)行此操作時(shí),請(qǐng)謹(jǐn)記
29、下列注意事項(xiàng): 整個(gè)操作為原子操作。要么執(zhí)行 INSERT 語(yǔ)句和包含 OUTPUT 子句的嵌套 DML 語(yǔ)句,要么整個(gè)語(yǔ)句失敗。 以下限制適用于外部 INSERT 語(yǔ)句的目標(biāo): 目標(biāo)不能為遠(yuǎn)程表、視圖或公用表表達(dá)式。 目標(biāo)不能具有 FOREIGN KEY 約束,或者由 FOREIGN KEY 約束引用。 不能對(duì)目標(biāo)定義任何觸發(fā)器。 不能參與合并復(fù)制或事務(wù)復(fù)制的可更新訂閱。 以下限制適用于嵌套 DML 語(yǔ)句: 目標(biāo)不能為遠(yuǎn)程表或分區(qū)視圖。 源本身不能包含 <dml_table_source> 子句。 在包含 <dml_table_source> 子句的 INSERT 語(yǔ)
30、句中不支持 OUTPUT INTO 子句。 ROWCOUNT 僅返回外部 INSERT 語(yǔ)句插入的行。 IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 僅返回嵌套 DML 語(yǔ)句生成的標(biāo)識(shí)值,而不返回外部 INSERT 語(yǔ)句生成的標(biāo)識(shí)值。 查詢通知將語(yǔ)句作為單個(gè)實(shí)體進(jìn)行處理,即使重大更改來(lái)自外部 INSERT 語(yǔ)句本身,所創(chuàng)建的任何消息的類型也是嵌套 DML 的類型。 在 <dml_table_source> 子句中,SELECT 和 WHERE 子句不能包括子查詢、聚合函數(shù)、排名函數(shù)、全文謂詞、執(zhí)行數(shù)據(jù)訪問(wèn)的用戶定義函數(shù)或 TEXTPTR 函數(shù)。權(quán)限
31、需要針對(duì)目標(biāo)表的 INSERT 權(quán)限。INSERT 權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色、db_owner 和 db_datawriter 固定數(shù)據(jù)庫(kù)角色以及表所有者的成員。sysadmin、db_owner 和 db_securityadmin 角色成員以及表所有者可以將權(quán)限轉(zhuǎn)讓給其他用戶。若要使用 OPENROWSET 函數(shù) BULK 選項(xiàng)執(zhí)行 INSERT,您必須是 sysadmin 固定服務(wù)器角色成員或 bulkadmin 固定服務(wù)器角色成員。示例A. 執(zhí)行簡(jiǎn)單的 INSERT 語(yǔ)句以下示例在 Production.UnitMeasure 表中插入一行。由于提供了所有列的值并
32、按表中各列的順序列出這些值,因此不必在 column_list. 中指定列名。USE AdventureWorks;GOINSERT INTO Production.UnitMeasureVALUES (N'F2', N'Square Feet', GETDATE(;GOB. 插入多行數(shù)據(jù)下面的示例創(chuàng)建表 dbo.Departments,然后使用行構(gòu)造函數(shù)將五行數(shù)據(jù)插入到該表中。由于提供了所有列的值并按表中各列的順序列出這些值,因此不必在列列表中指定列名。USE AdventureWorks;GOIF OBJECT_ID (N'dbo.Departmen
33、ts', N'U' IS NOT NULL DROP TABLE dbo.Departments;GOCREATE TABLE dbo.Departments (DeptID tinyint NOT NULL PRIMARY KEY, DeptName nvarchar(30, Manager nvarchar(50;GOINSERT INTO dbo.Departments VALUES (1, 'Human Resources', 'Margheim',(2, 'Sales', 'Byham', (3,
34、 'Finance', 'Gill',(4, 'Purchasing', 'Barber',(5, 'Manufacturing', 'Brewer'C. 按與表列順序不同的順序插入數(shù)據(jù)下面的示例使用 column_list 顯式指定插入到每個(gè)列中的值。UnitMeasure 表中的列順序?yàn)?UnitMeasureCode、Name、ModifiedDate;但這些列的列出順序與 column_list 中的順序不同。USE AdventureWorks;GOINSERT INTO Producti
35、on.UnitMeasure (Name, UnitMeasureCode,ModifiedDateVALUES (N'Square Yards', N'Y2', GETDATE(;GOD. 插入所含值數(shù)目少于列數(shù)目的數(shù)據(jù)以下示例顯示了如何將行插入到表中,該表包含自動(dòng)生成值或具有默認(rèn)值的列。INSERT 語(yǔ)句插入一些行,這些行只有部分列包含值。在最后一個(gè) INSERT 語(yǔ)句中,未指定列,只插入了默認(rèn)值。USE AdventureWorks;GOIF OBJECT_ID ('dbo.T1', 'U' IS NOT NULLDROP
36、TABLE dbo.T1;GOCREATE TABLE dbo.T1 (column_1 int IDENTITY, column_2 varchar(30 CONSTRAINT default_name DEFAULT ('my column default',column_3 timestamp,column_4 varchar(40 NULL;GOINSERT INTO dbo.T1 (column_4 VALUES ('Explicit value'INSERT INTO dbo.T1 (column_2, column_4 VALUES ('E
37、xplicit value', 'Explicit value'INSERT INTO dbo.T1 (column_2 VALUES ('Explicit value'INSERT INTO T1 DEFAULT VALUES; GOSELECT column_1, column_2, column_3, column_4FROM dbo.T1;GOE. 將數(shù)據(jù)插入到含標(biāo)識(shí)列的表中下面的示例演示了將數(shù)據(jù)插入到標(biāo)識(shí)列中的不同方法。前兩個(gè) INSERT 語(yǔ)句允許為新行生成標(biāo)識(shí)值。第三個(gè) INSERT 語(yǔ)句用 SET IDENTITY_INSERT 語(yǔ)句覆蓋
38、列的 IDENTITY 屬性,并將一個(gè)顯式值插入到標(biāo)識(shí)列中。USE AdventureWorks;GOIF OBJECT_ID ('dbo.T1', 'U' IS NOT NULLDROP TABLE dbo.T1;GOCREATE TABLE dbo.T1 ( column_1 int IDENTITY, column_2 VARCHAR(30;GOINSERT T1 VALUES ('Row #1'INSERT T1 (column_2 VALUES ('Row #2'GOSET IDENTITY_INSERT T1 ON;G
39、OINSERT INTO T1 (column_1,column_2 VALUES (-99, 'Explicit identity value'GOSELECT column_1, column_2FROM T1;GOF. 通過(guò)使用 NEWID( 將數(shù)據(jù)插入到 uniqueidentifier 列中下面的示例使用 NEWID( 函數(shù)獲取 column_2 的 GUID。與標(biāo)識(shí)列不同,數(shù)據(jù)庫(kù)引擎不為 uniqueidentifier 數(shù)據(jù)類型的列自動(dòng)生成值(如第二個(gè) INSERT 語(yǔ)句所示)。USE AdventureWorks;GOIF OBJECT_ID ('dbo
40、.T1', 'U' IS NOT NULLDROP TABLE dbo.T1;GOCREATE TABLE dbo.T1 (column_1 int IDENTITY, column_2 uniqueidentifier,;GOINSERT INTO dbo.T1 (column_2 VALUES (NEWID(;INSERT INTO T1 DEFAULT VALUES; GOSELECT column_1, column_2FROM dbo.T1;GOG. 通過(guò)視圖將數(shù)據(jù)插入表中下面的示例在 INSERT 語(yǔ)句中指定一個(gè)視圖名,但將新行插入到該視圖的基礎(chǔ)表中。INS
41、ERT 語(yǔ)句中 VALUES 列表的順序必須與視圖的列順序相匹配。USE AdventureWorks;GOIF OBJECT_ID ('dbo.T1', 'U' IS NOT NULLDROP TABLE dbo.T1;GOIF OBJECT_ID ('dbo.V1', 'V' IS NOT NULLDROP VIEW dbo.V1;GOCREATE TABLE T1 ( column_1 int, column_2 varchar(30;GOCREATE VIEW V1 AS SELECT column_2, column_1
42、 FROM T1;GOINSERT INTO V1 VALUES ('Row 1',1;GOSELECT column_1, column_2 FROM T1;GOSELECT column_1, column_2FROM V1;GOH. 使用 SELECT 和 EXECUTE 選項(xiàng)插入數(shù)據(jù)下面的示例演示了三種不同的方法,用來(lái)從一個(gè)表獲取數(shù)據(jù),并將數(shù)據(jù)插入到另一個(gè)表中。每種方法都基于一個(gè)多表 SELECT 語(yǔ)句,該語(yǔ)句在列列表中包含一個(gè)表達(dá)式及一個(gè)文字值。第一個(gè) INSERT 語(yǔ)句使用 SELECT 語(yǔ)句直接從源表(Employee、SalesPerson 和 Contact)
43、中檢索數(shù)據(jù),并將結(jié)果集存儲(chǔ)在 EmployeeSales 表中。第二個(gè) INSERT 執(zhí)行一個(gè)包含 SELECT 語(yǔ)句的存儲(chǔ)過(guò)程,而第三個(gè) INSERT 將 SELECT 語(yǔ)句作為一個(gè)文字字符串執(zhí)行。USE AdventureWorks;GOIF OBJECT_ID ('dbo.EmployeeSales', 'U' IS NOT NULLDROP TABLE dbo.EmployeeSales;GOIF OBJECT_ID ('dbo.uspGetEmployeeSales', 'P' IS NOT NULLDROP PROCE
44、DURE uspGetEmployeeSales;GOCREATE TABLE dbo.EmployeeSales( DataSource varchar(20 NOT NULL,EmployeeID varchar(11 NOT NULL,LastName varchar(40 NOT NULL,SalesDollars money NOT NULL;GOCREATE PROCEDURE dbo.uspGetEmployeeSales AS SET NOCOUNT ON;SELECT 'PROCEDURE', e.EmployeeID, c.LastName, sp.Sale
45、sYTD FROM HumanResources.Employee AS e INNER JOIN Sales.SalesPerson AS sp ON e.EmployeeID = sp.SalesPersonID INNER JOIN Person.Contact AS cON e.ContactID = c.ContactIDWHERE e.EmployeeID LIKE '2%'ORDER BY e.EmployeeID, c.LastName;GO-INSERT.SELECT exampleINSERT dbo.EmployeeSalesSELECT 'SEL
46、ECT', e.EmployeeID, c.LastName, sp.SalesYTD FROM HumanResources.Employee AS eINNER JOIN Sales.SalesPerson AS spON e.EmployeeID = sp.SalesPersonID INNER JOIN Person.Contact AS cON e.ContactID = c.ContactIDWHERE e.EmployeeID LIKE '2%'ORDER BY e.EmployeeID, c.LastName;GO-INSERT.EXECUTE proc
47、edure exampleINSERT EmployeeSales EXECUTE uspGetEmployeeSales;GO-INSERT.EXECUTE('string' exampleINSERT EmployeeSales EXECUTE ('SELECT ''EXEC STRING'', e.EmployeeID, c.LastName, sp.SalesYTD FROM HumanResources.Employee AS e INNER JOIN Sales.SalesPerson AS sp ON e.EmployeeI
48、D = sp.SalesPersonID INNER JOIN Person.Contact AS cON e.ContactID = c.ContactIDWHERE e.EmployeeID LIKE ''2%''ORDER BY e.EmployeeID, c.LastName'GO-Show results.SELECT DataSource,EmployeeID,LastName,SalesDollarsFROM dbo.EmployeeSales;GOI. 通過(guò)使用 TOP 子句插入數(shù)據(jù)下面的示例創(chuàng)建 NewEmployee 表,并將 Emp
49、loyee 表中前 10 名雇員的地址數(shù)據(jù)插入到該表中。然后執(zhí)行 SELECT 語(yǔ)句以驗(yàn)證 NewEmployee 表的內(nèi)容。USE AdventureWorks;GOIF OBJECT_ID (N'HumanResources.NewEmployee', N'U' IS NOT NULLDROP TABLE HumanResources.NewEmployee;GOCREATE TABLE HumanResources.NewEmployee(EmployeeID int NOT NULL,LastName nvarchar(50 NOT NULL,First
50、Name nvarchar(50 NOT NULL,Phone Phone NULL,AddressLine1 nvarchar(60 NOT NULL,City nvarchar(30 NOT NULL,State nchar(3 NOT NULL, PostalCode nvarchar(15 NOT NULL,CurrentFlag Flag;GOINSERT TOP (10 INTO HumanResources.NewEmployee SELECTe.EmployeeID, c.LastName, c.FirstName, c.Phone,a.AddressLine1, a.City
51、, sp.StateProvinceCode, a.PostalCode, e.CurrentFlagFROM HumanResources.Employee eINNER JOIN HumanResources.EmployeeAddress AS eaON e.EmployeeID = ea.EmployeeIDINNER JOIN Person.Address AS aON ea.AddressID = a.AddressIDINNER JOIN Person.StateProvince AS spON a.StateProvinceID = sp.StateProvinceIDINNE
52、R JOIN Person.Contact as cON e.ContactID = c.ContactID;GOSELECT EmployeeID, LastName, FirstName, Phone,AddressLine1, City, State, PostalCode, CurrentFlagFROM HumanResources.NewEmployee;GOJ. 將 OUTPUT 用于 INSERT 語(yǔ)句下面的示例將行插入到 ScrapReason 表中,并使用 OUTPUT 子句將語(yǔ)句的結(jié)果返回到 MyTableVar table 變量。由于 ScrapReasonID 列使用
53、 IDENTITY 屬性定義,因此未在 INSERT 語(yǔ)句中為該列指定值。但應(yīng)注意,數(shù)據(jù)庫(kù)引擎為該列生成的值在 INSERTED.ScrapReasonID 列中的 OUTPUT 子句中返回。USE AdventureWorks;GODECLARE MyTableVar table( ScrapReasonID smallint,Name varchar(50,ModifiedDate datetime;INSERT Production.ScrapReasonOUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
54、INTO MyTableVarVALUES (N'Operator error', GETDATE(;-Display the result set of the table variable.SELECT ScrapReasonID, Name, ModifiedDate FROM MyTableVar;-Display the result set of the table.SELECT ScrapReasonID, Name, ModifiedDate FROM Production.ScrapReason;GOK. 將 WITH 公用表表達(dá)式用于 INSERT 語(yǔ)句下面
55、的示例創(chuàng)建 NewEmployee 表。公用表表達(dá)式 (EmployeeTemp 定義要插入到 NewEmployee 表中的行。INSERT 語(yǔ)句引用公用表表達(dá)式中的列。USE AdventureWorks;GOIF OBJECT_ID (N'HumanResources.NewEmployee', N'U' IS NOT NULLDROP TABLE HumanResources.NewEmployee;GOCREATE TABLE HumanResources.NewEmployee(EmployeeID int NOT NULL,LastName nva
56、rchar(50 NOT NULL,FirstName nvarchar(50 NOT NULL,Phone Phone NULL,AddressLine1 nvarchar(60 NOT NULL,City nvarchar(30 NOT NULL,State nchar(3 NOT NULL, PostalCode nvarchar(15 NOT NULL,CurrentFlag Flag;GOWITH EmployeeTemp (EmpID, LastName, FirstName, Phone, Address, City, StateProvince, PostalCode, Cur
57、rentFlagAS (SELECT e.EmployeeID, c.LastName, c.FirstName, c.Phone,a.AddressLine1, a.City, sp.StateProvinceCode, a.PostalCode, e.CurrentFlagFROM HumanResources.Employee eINNER JOIN HumanResources.EmployeeAddress AS eaON e.EmployeeID = ea.EmployeeIDINNER JOIN Person.Address AS aON ea.AddressID = a.Add
58、ressIDINNER JOIN Person.StateProvince AS spON a.StateProvinceID = sp.StateProvinceIDINNER JOIN Person.Contact as cON e.ContactID = c.ContactIDINSERT INTO HumanResources.NewEmployee SELECT EmpID, LastName, FirstName, Phone, Address, City, StateProvince, PostalCode, CurrentFlagFROM EmployeeTemp;GOL. 將 OUTPUT 用于標(biāo)識(shí)列和計(jì)算列下面的示例創(chuàng)建 EmployeeSales 表,然后使用 INSERT 語(yǔ)句向其中插入若干行,并使用 SELECT 語(yǔ)句從源表中檢索數(shù)據(jù)。EmployeeSales 表包含標(biāo)識(shí)列 (EmployeeID 和計(jì)算列 (ProjectedSales。由于這些值是在插入操作期間由數(shù)據(jù)庫(kù)引擎生成的,因此不能在 MyTableVar 中定義上述兩列。USE AdventureWorks ;GOIF OBJECT_ID ('dbo.EmployeeSales', 'U' IS NOT NULLDROP TABLE dbo.E
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度屋頂光伏系統(tǒng)維護(hù)保養(yǎng)合同模板
- 學(xué)校安全管理方案
- 2024-2025學(xué)年廣西壯族自治區(qū)高三上學(xué)期11月聯(lián)考?xì)v史試卷
- 2025年公共照明設(shè)施合同
- 2025年自動(dòng)化設(shè)備購(gòu)買與前期策劃協(xié)議
- 2025年住宅用地和樓宇訂購(gòu)合同
- 2025年綠化養(yǎng)護(hù)承包合同范本
- 2025年外教聘請(qǐng)合作協(xié)議
- 2025年二手房產(chǎn)交易代理協(xié)議格式
- 2025年交通運(yùn)輸中介合同協(xié)議書(shū)范本
- 運(yùn)動(dòng)會(huì)活動(dòng)流程中的醫(yī)療安全保障措施
- 2025年冷鏈物流產(chǎn)品配送及倉(cāng)儲(chǔ)管理承包合同3篇
- 電鍍產(chǎn)業(yè)園項(xiàng)目可行性研究報(bào)告(專業(yè)經(jīng)典案例)
- 2025年魯泰集團(tuán)招聘170人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024-2025學(xué)年成都高新區(qū)七上數(shù)學(xué)期末考試試卷【含答案】
- 企業(yè)員工食堂管理制度框架
- 【開(kāi)題報(bào)告】中小學(xué)校鑄牢中華民族共同體意識(shí)教育研究
- 2024-2025學(xué)年云南省大理州七年級(jí)(上)期末英語(yǔ)試卷(含答案)
- 中國(guó)遠(yuǎn)洋海運(yùn)集團(tuán)招聘筆試沖刺題2025
- 《辣椒主要病蟲(chóng)害》課件
- 2024年煤礦安全生產(chǎn)知識(shí)培訓(xùn)考試必答題庫(kù)及答案(共190題)
評(píng)論
0/150
提交評(píng)論