一般都是單行、單行的新增,也就是一筆一筆的新增,這是針對前台而言,但對於管理的後台,很常有大量新增資料的需求,這時候必須組合出相對應的Insert語法,然後再傳送給MS SQL Server進行資料新增動作,但這裡如果有錯,通常很難Debug,因為如果有100筆的大量新增,就是同時有100行程式碼要看,如果有500筆就是500行程式碼要看,實在很傷眼。
例如Northwind.sql中的程式碼:
-- Customers INSERT "Customers" VALUES('ALFKI','Alfreds Futterkiste','Maria Anders','Sales Representative','Obere Str. 57','Berlin',NULL,'12209','Germany','030-0074321','030-0076545') INSERT "Customers" VALUES('ANATR','Ana Trujillo Emparedados y helados','Ana Trujillo','Owner','Avda. de la Constitución 2222','México D.F.',NULL,'05021','Mexico','(5) 555-4729','(5) 555-3745') INSERT "Customers" VALUES('ANTON','Antonio Moreno Taquería','Antonio Moreno','Owner','Mataderos 2312','México D.F.',NULL,'05023','Mexico','(5) 555-3932',NULL) INSERT "Customers" VALUES('AROUT','Around the Horn','Thomas Hardy','Sales Representative','120 Hanover Sq.','London',NULL,'WA1 1DP','UK','(171) 555-7788','(171) 555-6750')
這種Code要你從100行或500行裡找出問題,或是從前端(*.aspx)組合出來的Code,要人命。不過這種情況到了MS SQL Server 2008之後有了改善,MS SQL Server 2008之後支援了一個「資料表值建構函式」,看起來文言文,但用起來是相當容易:
INSERT "Customers" VALUES ('ALFKI','Alfreds Futterkiste','Maria Anders','Sales Representative','Obere Str. 57','Berlin',NULL,'12209','Germany','030-0074321','030-0076545'), ('ANATR','Ana Trujillo Emparedados y helados','Ana Trujillo','Owner','Avda. de la Constitución 2222','México D.F.',NULL,'05021','Mexico','(5) 555-4729','(5) 555-3745'), ('ANTON','Antonio Moreno Taquería','Antonio Moreno','Owner','Mataderos 2312','México D.F.',NULL,'05023','Mexico','(5) 555-3932',NULL), ('AROUT','Around the Horn','Thomas Hardy','Sales Representative','120 Hanover Sq.','London',NULL,'WA1 1DP','UK','(171) 555-7788','(171) 555-6750')
有沒有看出差異?
Insert 資料表 Values (第一筆資料), (第二筆資料), (第三筆資料), ...n
我就不用每一筆資料就必須寫一行Insert,在Values之後可以接最大1000筆的資料。這樣簡化Insert ... Values ...語法之後,不論是字串的組合上,或是後續的除錯上都可減輕工作量。
重點整理:
- SQL Server 2008後才有支援。
- Values後的資料列,以括號括住,並以逗點隔開。
- Values後的資料列,最大1000筆,超過部分(1001筆)必須建立新的Insert來執行。
Reference:
謝謝你!這個很有幫助^^
回覆刪除