首先把上节没讲完的讲完:
多列更新
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;
本文介绍了SQL中的多列更新、大容量数据更新及删除等操作方法,并对比了TRUNCATE与DELETE的区别,还展示了如何利用OUTPUT子句获取INSERT、DELETE、UPDATE语句的影响信息。
1251

被折叠的 条评论
为什么被折叠?



