例如Northwind.sql中的程式碼:
2 |
INSERT "Customers" VALUES ( 'ALFKI' , 'Alfreds Futterkiste' , 'Maria Anders' , 'Sales Representative' , 'Obere Str. 57' , 'Berlin' , NULL , '12209' , 'Germany' , '030-0074321' , '030-0076545' ) |
3 |
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' ) |
4 |
INSERT "Customers" VALUES ( 'ANTON' , 'Antonio Moreno Taquería' , 'Antonio Moreno' , 'Owner' , 'Mataderos 2312' , 'México D.F.' , NULL , '05023' , 'Mexico' , '(5) 555-3932' , NULL ) |
5 |
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 Server2008之後有了改善,MS SQL Server 2008之後支援了一個「資料表值建構函式」,看起來文言文,但用起來是相當容易:
1 |
INSERT "Customers" VALUES |
2 |
( 'ALFKI' , 'Alfreds Futterkiste' , 'Maria Anders' , 'Sales Representative' , 'Obere Str. 57' , 'Berlin' , NULL , '12209' , 'Germany' , '030-0074321' , '030-0076545' ), |
3 |
( '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' ), |
4 |
( 'ANTON' , 'Antonio Moreno Taquería' , 'Antonio Moreno' , 'Owner' , 'Mataderos 2312' , 'México D.F.' , NULL , '05023' , 'Mexico' , '(5) 555-3932' , NULL ), |
5 |
( 'AROUT' , 'Around the Horn' , 'Thomas Hardy' , 'Sales Representative' , '120 Hanover Sq.' , 'London' , NULL , 'WA1 1DP' , 'UK' , '(171) 555-7788' , '(171) 555-6750' ) |
有沒有看出差異?
2 |
Values (第一筆資料), (第二筆資料), (第三筆資料), ...n |
我就不用每一筆資料就必須寫一行Insert,在Values之後可以接最大1000筆的資料。這樣簡化Insert ... Values ...語法之後,不論是字串的組合上,或是後續的除錯上都可減輕工作量。
重點整理:
- SQL Server 2008後才有支援。
- Values後的資料列,以括號括住,並以逗點隔開。
- Values後的資料列,最大1000筆,超過部分(1001筆)必須建立新的Insert來執行。
T-SQL -- UPDATE加強版之WRITE子句修改大數值資料類型(MAX)
在MS SQL Server 2005新增了「MAX」的資料類型,如:varchar(MAX)、nvarchar(MAX)、varbinary(MAX),MSDN翻譯為「
大數值資料類型」,基本上是可以儲存到2^31-1位元組的資料,而且加強了數種功能:
- 在triger中,可以在inserted和deleted資料表中使用大數值資料類型;
- Update新增Write()函數,可以對大數值資料類型執行區塊更新;
我在「
透過資料庫上傳下載檔案」裡提過一次,我再提一次:
在未來的 Microsoft SQL Server 版本中,將移除 ntext、text 和 image 等資料類型。請避免在新的開發工作中使用這些資料類型,並規劃修改目前在使用這些資料類型的應用程式。請改用 nvarchar(max)、varchar(max) 和 varbinary(max)。
如果你使用MS SQL Server 2005之後的版本,請注意以上訊息。
UPDATE之WRITE()子句
我們來看Update含Write()子句的語法:
2 |
Set 資料行 = .Write(運算式, 起點位置,長度) |
看實例:
04 |
id INT IDENTITY(1,1) NOT NULL , |
11 |
(N '在MS SQL Server 2005新增了「MAX」的資料類型,如:varchar(MAX)、nvarchar(MAX)、varbinary(MAX),MSDN翻譯為「大數值資料類型」,基本上是可以儲存到2^31-1位元組的資料,而且加強了數種功能' ), |
12 |
(N '在未來的 Microsoft SQL Server 版本中,將移除 ntext、text 和 image 等資料類型。請避免在新的開發工作中使用這些資料類型,並規劃修改目前在使用這些資料類型的應用程式。請改用 nvarchar(max)、varchar(max) 和 varbinary(max)。' ) |
18 |
SET CONTENT.write( 'Microsoft' ,1,2) |
23 |
SET CONTENT.write( 'MS' ,5,9) |
使用Write()子句只有一點點不方便,就是你必須自己計算「起點位置」及「長度」,還有不能更新值為Null等。