- Insert Values
- Insert Select
- Insert Exec
- Select Into
- Bulk Insert
Insert Values是最常用的一種插入數據的方式,基本語法如下,表名之后可以指定目標列的名稱,這種顯式的指定目標列的名稱是可選的,但是這種做法的好處是對語句的列值列名之間的關聯關系進行控制,而不必單純的依賴定義表時
各個列出現的順序
INSERT INTO dbo.DimDate ( DataKey , Year , Qu , QuCN , Month , MonthCN , Ten , TenCN , Week , WeekDay , Day , Date ) VALUES ( 0 , -- DataKey - int 0 , -- Year - int 0 , -- Qu - int '' , -- QuCN - varchar(20) 0 , -- Month - int '' , -- MonthCN - varchar(20) 0 , -- Ten - int '' , -- TenCN - varchar(20) 0 , -- Week - int '' , -- WeekDay - varchar(20) 0 , -- Day - int '2014-09-23 13:34:16' -- Date - datetime )
確定列值的優先級順序:給定的值》默認值》Null
Sql2008增強了Values功能,允許在一條語句中指定由逗號隔開的多條記錄
INSERT INTO dbo.Table_1 ( ID ) VALUES ( 0 ),( 1 ),( 2 )
使用Values構建虛擬表
SELECT * FROM (VALUES ( 0 ),( 1 ),( 2 )) AS a(id)
Insert Select
Insert Select 將一組由Select查詢返回的結果行插入到目標表中(目標表是已經存在的表,這一點和Select Into有區別)
INSERT INTO dbo.Table_1 SELECT * FROM dbo.Table_2
Insert Exec
Insert Exec 語句可以把存儲過程或動態Sql批處理返回的結果集插入到目標表
Select Into
Select Into的作用是創建一個目標表,並用返回的結果集填充它,不能用這個語句向已經存在的表中插入數據,
當指定的目標表是臨時表時自動創建一個臨時表,指定為用戶表時創建一個用戶表,
Select Into 會復制來源表的基本結構(包括列名、數據類型、是否允許NUll以及IDentity屬性),不會復制的三樣東西(約束、索引、觸發器)
Select into的另一個優點:如果數據庫的屬性沒有設置成完成恢復模式,Select into 就會按照最小日志記錄模式來執行操作
Bulk Insert
這種方式用的比較少,用於將文件中的數據導入一個已經存在的表
示例本例從指定的數據文件中導入訂單詳細信息,該文件使用豎杠 (|) 字符作為字段終止符,使用 |/n 作為行終止符。
BULK INSERT Northwind.dbo.[Order Details] FROM 'f:/orders/lineitem.tbl' WITH ( FIELDTERMINATOR = '|', ROWTERMINATOR = '|/n' )