T-SQL入門攻略之14-获取DML语句的影响信息
2010-10-22 14:29
281 查看
首先把上节没讲完的讲完:
多列更新
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;
多列更新
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;
相关文章推荐
- T-SQL入門攻略之14-获取DML语句的影响信息
- T-SQL入門攻略之14-获取DML语句的影响信息
- T-SQL入門攻略之14-获取DML语句的影响信息
- SQL语句来获取一个表的所有列的信息,如,列名、类型、长度等
- sql语句获取表,视图,存储过程等信息(自己总结)
- 两种获取MySql数据库中所有表的主键和外键约束信息的Sql语句
- 获取sql语句影响的数据条数并打印到表格
- SQL语句来获取一个表的所有列的信息,如,列名、类型、长度等(转)
- sql语句获取7天以内的信息
- SQL语句来获取一个表的所有列的信息,如,列名、类型、长度等
- 答:SQLServer DBA 三十问之六:Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;
- 使用sql语句实现跨数据库获取信息
- SQL语句来获取一个表的所有列的信息,如,列名、类型、长度等
- SQL语句来获取一个表的所有列的信息,如,列名、类型、长度等
- oracle常用的修改表信息及其获取系统日期时间的sql语句
- 教你如何在 sql server 2005 使用 sql 语句获取字段的说明信息
- SQL SERVER 获取表结构信息的SQL语句
- 获取数据库系统信息的SQL语句(Mysql,Oracle)
- SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息
- SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息