目录
5.在维护SQL Server事务控制时向文件系统存储非结构化数据
1.更新一行
这个示例通过指定SpecialOfferID来更新一行,SpecialOfferID是表的主键。在实施这个更新之前,我们先查询计划修改的行:
use adventureworks
go
SELECT DiscountPct
FROM Sales.SpecialOffer
WHERE SpecialOfferID=10
现在实施修改操作:
UPDATE Sales.SpecialOffer
SET DiscountPct=0.15
WHERE SpecialOfferID=10
SELECT DiscountPct
FROM Sales.SpecialOffer
WHERE SpecialOfferID=10
2.根据FROM和WHERE子句更新新行
在这个示例中,假设Production. Product表中有一个产品“Full-Finger Gloves,M",这个产品每一位顾客最多只允许购买两个。为了达到这个查询的目的,任何购物车中只要这个产品的数量超过两个,都需要立即调整为所要求的限制:
use adventureworks
go
UPDATE Sales.ShoppingCartItem
SET Quantity=2,ModifiedDate=GETDATE()
FROM Sales.ShoppingCartItem c
INNER JOIN Production.Product p ON
c.ProductID=p.ProductID
WHERE p.Name='Full-Finger Gloves,M' AND c.Quantity>2
3.更新大值数据类型的列
SQL Server在其早期版本中就引入了新的大值数据类型,旨在代替不推荐的text、ntext和imaga数据类型。这些新的数据类型包括:
- varchar(max),保存非Unicode的变长数据;
- nvarchar(max),保存Unicode的变长数据:
- varbinary(max),保存变长的二进制数据口
这些数据类型能存储高达2^31-1字节的数据。
旧的text和image数据类型的一个主要缺点是,需要使用诸如WRITETEXT和UPDATETEXT等独立的函数来操作image/text数据。使用新的大值数据类型,就可以直接使用常规的INSERT和UPDATE操作。
插入大值数据类型的语法和普通的插入没有什么两样。但是,对于更新大值数据类型,UPDATE命令包含了一个.WRITE方法:
UPDATE <table_or_view_name>
SET column_name=.WRITE(expression,@offset,@Length)
FROM <table_source>
WHERE <search_condition>
use adventureworks
go
CREATE TABLE dbo.RecipeChapter
(
ChapterID int NOT NULL,
Chapter varchar(max) NOT NULL
)
go
INSERT dbo.RecipeChapter
(ChapterID,Chapter)
VALUES
(1,'At the begging of each chapter you will notice that basic concept first.')
--更新刚插入的行