T-SQL -- Insert加強版之資料表值建構函式(Values)

我們在處理一些從網頁裡來新增要求時,不免要進行T-SQL字串組合,Insert沒什麼技巧,反正組合起來的Insert及Values裡帶入的資料類型正確,大約就沒什麼問題。

一般都是單行、單行的新增,也就是一筆一筆的新增,這是針對前台而言,但對於管理的後台,很常有大量新增資料的需求,這時候必須組合出相對應的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:

1 則留言:

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。