1、插入資料
SQL提供了4中形式的insert命令以及select/into命令作為插入資料的主要方法。insert命令的形式如下:
1>、insert/values:插入一行資料,通常用於插入來自使用者介面的資料。
2>、insert/select:插入一個結果集,通常用於操作多行資料。
3>、insert/exec:插入一個預存程序的執行結果,用於複雜的資料操作。
4>、insert default:插入一個由各個列的預設值構成的新行,使用它可以通過預先填充的方式為未來的資料保留一些資料行。
5>、select/into:利用一個select語句的結果集來建立一個新表。
1.1、插入一行資料
最簡單也最直接的插入資料的方法是insert/values方法。insert/values語句的文法格式如下:
INSERT [INTO] owner.Table [(columns, ...)] VALUES (value, ...)
1.2、插入select語句的結果集
使用insert/select語句,可以將一個查詢結果集合中的資料移轉到表中。這種方法真正的能力在於:可以使用select語句命令從幾乎所有的資料來源中擷取資料,並對其進行靈活加工處理以滿足當前的需要。這使得insert/select語句具有了無與倫比的靈活性。因為select語句可以返回大量的行,所有這種insert方法可以一次插入大量的行。
insert/select語句的文法格式如下:
INSERT [INTO] owner.Table SELECT columns FROM datasources [WHERE conditions]
1.3、插入預存程序的結果集
insert操作的insert/exec方法可以利用預存程序來擷取資料,並將這些資料插入到表中。這種方法的優勢在於可以利用全部的T-SQL特性,插入列與預存程序結果集中的列必須一一對應。
insert/exec命令的基本文法:
INSERT [INTO] owner.Table [(columns)] EXEC StoreProcedure Parameters
與insert操作有關的一個特殊的問題是為新插入的行建立主索引值,SQL Server為產生主索引值提供了識別欄位和GUID。
在SQL Server中可以使用3種方法來擷取系統產生的標識值:
◊ @@identity:這個全域變數可以返回SQL Server為任意表、串連和範圍所產生的最近一個標識值。如果在你進行insert操作的時間和檢查@@identity的時間之間有另一個insert操作被執行,@@identity返回就不是系統為你的insert所產生的標識值,而是它為最近的這個insert操作所產生的標識值。
◊ scope_identity():可以返回在當前調用的批次程式或者過程中的範圍內系統所產生的最近一個標識值。建議使用這個方法,因為這是一種最安全的確定你最近產生的標識值的方法。
◊ iden_current(table):返回系統為指定的表所產生的最近一個標識值,但只會返回指定表的標識值,不管對其他的表是否進行insert操作,這樣可以防止深藏在觸發器中的另一個insert操作影響到這個函數返回的結果。