T-SQL入門攻略之14-获取DML语句的影响信息

本文介绍了SQL中的多列更新、大容量数据更新及删除等操作方法,并对比了TRUNCATE与DELETE的区别,还展示了如何利用OUTPUT子句获取INSERT、DELETE、UPDATE语句的影响信息。

首先把上节没讲完的讲完:

多列更新

UPDATE testbook

SET price = price * 0.3, -- 打折

    remark = ' 过时图书 ' -- 备注

WHERE date<= '2000-01-01' ;

大容量数据更新

GO

UPDATE file_table

SET FileName = 'Img100.jpg' ,

DOCUMENT =(

SELECT *

FROM OPENROWSET ( BULK 'C:/Img100.jpg' , SINGLE_BLOB) AS Document

)

WHERE FileType= '.jpg' ;

删除数据

(1)     删除部分数据

DELETE FROM book2      -- 删除部分数据

WHERE DATE< '2000/1/1' ;

(2)     删除全部数据

DELETE FROM book2      -- 删除全部数据

当然也可以这样删除全部数据

truncate table book2

注: 这里从效果上看 truncate table DELETE 是一样的 , 都是删除表中的所有数据,但是不包括表结构。但是他们有不同:

(1)       执行 delete 语句 系统将逐行对数据进行删除 并记录日志信息。

(2)        执行 truncate 语句时候 系统将一次性删除与表有关的所有数据页,且不记录日志,不形成日志文件。

基于以上亮点可以看出 truncate table 要比 delete 快的多,因为前者不记录日志。但是这也说明了 truncate table 语句删除的数据不能用 rollback 语句来恢复 . 相反 delete 可以

查看数据表

SELECT a. name 字段名 ,

       b. name 字段类型 ,

       a. max_length 字段长度

FROM sys.all_columns as a

JOIN sys.types as b

ON a. system_type_id = b. system_type_id

WHERE object_id = object_id ( 'dbo.student' );

删除数据表

Drop table T1, T2, T3

2005 及以上版本在操纵语句中使用 output 可以获取具体的影响信息 以下分别说明

Output Insert 语句中的应用

INSERT book

    OUTPUT INSERTED.*

SELECT 106, ' 数字图像处理 ' , ' 宋青书 ' , ' 科学出版社 ' , '2006/7/1' , '200607100' , 25.00, ' 较差 '

当然也可以把返回的结果保存起来但是必须用表 或者表变量 不能用变量来接受 感兴趣的可以试验下

IF OBJECT_ID ( 'T2' , 'U' ) IS NOT NULL DROP TABLE T2; -- 建立表结构

GO

CREATE TABLE T2

(

bkno       int ,

bkname     nvarchar ( 50),     

author     nvarchar ( 8)

);

INSERT book

   OUTPUT INSERTED. bkno, INSERTED. bkname, INSERTED. author

   INTO T2

SELECT 104, 'JSP 网站开发教程 ' , ' 赵敏 ' , ' 电子工业出版社 ' , '2002/10/11' , '200210201' , 35.00, ' 较好 '

UNION ALL

SELECT 105, 'C++Builder 程序设计 ' , ' 俞莲舟 ' , ' 人民邮电出版社 ' , '2007/1/1' , '200701111' , 53.00, ' 一般 '

Output delete 语句中的应用

DELETE FROM book   

   OUTPUT DELETED.*

WHERE bkno= 104;

 

Output update 语句中的应用

DECLARE @MyTableVar TABLE -- 建立表变量作用类似表

(

    preprice       numeric ( 10, 2),

    posprice       numeric ( 10, 2)

)

UPDATE book

SET price = price* 1.3

     OUTPUT     DELETED. price,

                  INSERTED. price

     INTO @MyTableVar;         

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值