T-SQL -- Update加強版之Write子句修改大數值資料類型(MAX)

在MS SQL Server 2005新增了「MAX」的資料類型,如:varchar(MAX)、nvarchar(MAX)、varbinary(MAX),MSDN翻譯為「大數值資料類型」,基本上是可以儲存到2^31-1位元組的資料,而且加強了數種功能:

  1. 在triger中,可以在inserted和deleted資料表中使用大數值資料類型;
  2. Update新增Write()函數,可以對大數值資料類型執行區塊更新;
我在「透過資料庫上傳下載檔案」裡提過一次,我再提一次:

在未來的 Microsoft SQL Server 版本中,將移除 ntext、text 和 image 等資料類型。請避免在新的開發工作中使用這些資料類型,並規劃修改目前在使用這些資料類型的應用程式。請改用 nvarchar(max)、varchar(max) 和 varbinary(max)
如果你使用MS SQL Server 2005之後的版本,請注意以上訊息。

Update之Write()子句


我們來看Update含Write()子句的語法:
Update 資料表
Set 資料行 = .Write(運算式, 起點位置,長度)
From 來源資料表
Where 條件

看實例:

-- 暫存資料表
CREATE TABLE #t1
(
 id INT IDENTITY(1,1) NOT NULL,
 CONTENT NVARCHAR(MAX)
);
GO

-- 新增兩筆資料,也是使用SQL Server 2005的新語法
INSERT #t1 VALUES 
(N'在MS SQL Server 2005新增了「MAX」的資料類型,如:varchar(MAX)、nvarchar(MAX)、varbinary(MAX),MSDN翻譯為「大數值資料類型」,基本上是可以儲存到2^31-1位元組的資料,而且加強了數種功能'), 
(N'在未來的 Microsoft SQL Server 版本中,將移除 ntext、text 和 image  等資料類型。請避免在新的開發工作中使用這些資料類型,並規劃修改目前在使用這些資料類型的應用程式。請改用  nvarchar(max)、varchar(max) 和 varbinary(max)。')
GO

-- 將id=1的MS換成Microsoft
-- 起點位置由0開始計算
UPDATE #t1
SET CONTENT.write('Microsoft',1,2)
WHERE id=1

-- 將id=2的Microsoft換成MS
UPDATE #t1
SET CONTENT.write('MS',5,9)
WHERE id=2
GO

SELECT  *
FROM    #t1
GO

DROP TABLE #t1
GO


使用Write()子句只有一點點不方便,就是你必須自己計算「起點位置」及「長度」,還有不能更新值為Null等。

Reference:

沒有留言:

張貼留言

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