SQL Server 2000常用命令
(1) 数据记录筛选:
sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]"
sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 in ('值1','值2','值3')"
sql="select * from 数据表 where 字段名 between 值1 and 值2"
(2) 更新数据记录:
sql="update 数据表 set 字段名=字段值 where 条件表达式"
sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"
(3) 删除数据记录:
sql="delete from 数据表 where 条件表达式"
sql="delete from 数据表" (将数据表所有记录删除)
(4) 添加数据记录:
sql="insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"
sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)
(5) 数据记录统计函数:
AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
引用以上函数的方法:
sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql)
用 rs("别名") 获取统的计值,其它函数运用同上。
(5) 数据表的建立和删除:
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 数据表名称 (永久性删除一个数据表)
4. 记录集对象的方法:
rs.movenext 将记录指针从当前的位置向下移一行
rs.moveprevious 将记录指针从当前的位置向上移一行
rs.movefirst 将记录指针移到数据表第一行
rs.movelast 将记录指针移到数据表最后一行
rs.absoluteposition=N 将记录指针移到数据表第N行
rs.absolutepage=N 将记录指针移到第N页的第一行
rs.pagesize=N 设置每页为N条记录
2、更改表格
ALTER TABLE table_name
ADD COLUMN column_name DATATYPE
说明:增加一个栏位(没有删除某个栏位的语法。
ALTER TABLE table_name
ADD PRIMARY KEY (column_name)
说明:更改表得的定义把某个栏位设为主键。
ALTER TABLE table_name
DROP PRIMARY KEY (column_name)
说明:把主键的定义删除。
3、建立索引
CREATE INDEX index_name ON table_name (column_name)
说明:对某个表格的栏位建立索引以增加查询时的速度。
4、删除
DROP table_name
DROP index_name
二、的资料形态 DATATYPEs
smallint
16 位元的整数。
interger
32 位元的整数。
decimal(p,s)
p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数
点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
float
32位元的实数。
double
64位元的实数。
char(n)
n 长度的字串,n不能超过 254。
varchar(n)
长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n)
和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为
了支援两个字元长度的字体,例如中文字。
vargraphic(n)
可变长度且其最大长度为 n 的双字元字串,n不能超过 2000。
date
包含了 年份、月份、日期。
time
包含了 小时、分钟、秒。
timestamp
包含了 年、月、日、时、分、秒、千分之一秒。
三、资料操作 DML (Data Manipulation Language)
资料定义好之後接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分 别介绍他们的语法:
1、增加资料:
INSERT INTO table_name (column1,column2,...)
valueS ( value1,value2, ...)
说明:
1.若没有指定column 系统则会按表格内的栏位顺序填入资料。
2.栏位的资料形态和所填入的资料必须吻合。
3.table_name 也可以是景观 view_name。
INSERT INTO table_name (column1,column2,...)
SELECT columnx,columny,... FROM another_table
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。
2、查询资料:
基本查询
SELECT column1,columns2,...
FROM table_name
说明:把table_name 的特定栏位资料全部列出来
SELECT *
FROM table_name
WHERE column1 = xxx
[AND column2 > yyy] [OR column3 <> zzz]
三)交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等
于6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:
select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]
其中selectstatement为待联合的SELECT查询语句。
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一
行。
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类
型,系统将低精度的数据类型转换为高精度的数据类型。
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:
查询1 UNION (查询2 UNION 查询3)
INSERT语句
用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:
INSERT INTO EMPLOYEES valueS
('Smith','John','1980-06-10',
'Los Angles',16,45000);
通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。
我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。
如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。
回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。
同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。
对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd)
select @@servername
sp_helpdb master
--设置单用户模式,同时立即断开所有用户
alter database Northwind set single_user with rollback immediate
alter database Northwind set multi_user
--察看数据库属性
sp_helpdb
select databasepropertyex('Northwind','recovery')
alter database Northwind set auto_create_statistics on/off
alter database Northwind set auto_update_statistics on/off
select * from msdb..sysjobs
exec msdb..sp_help_job @job_name = 'HQCRM-CrmNew-CrmNew_2Dimension-NANJINGCRM-216'
exec msdb..sp_update_job @job_id = 0x4CA27521C9033C48954E7BFC6B965395, @enabled = 1
exec sp_helpsrvrolemember
exec sp_addsrvrolemember 'member_name','sysadmin'
exec sp_dropsrvrolemember 'member_name','sysadmin'
exec sp_helprole
exec sp_addrole 'role_name'
exec sp_droprole 'role_name'
exec sp_helpuser
use dbname
go
exec sp_dropuser guest
--修改对象拥有者
exec sp_changeobjectowner 'old_onwer.table_name', 'new_owner'
--查看BUILTIN/Administrators帐号
exec master..xp_logininfo 'BUILTIN/Administrators', 'members'
exec sp_defaultdb 'login', 'defaultdb'
exec sp_addlogin @loginame = 'esProgram',@passwd = 'h1J2P97vfdlK34',@defdb = 'career'
--更改登陆数据库访问权限
use <dbname>
exec sp_grantdbaccess @loginame ='esProgram',@name_in_db = 'esProgram'
--把角色db_appuser添加用户帐号中
use <dbname>
exec sp_addrolemember @rolename = 'db_appuser',@membername = 'esProgram'
use master
/* Procedure for 8.0 server */
create proc usp_databases
as
set nocount on
declare @name sysname
declare @SQL nvarchar(600)
create table #databases (
DATABASE_NAME sysname NOT NULL,
size int NOT NULL)
select name from master.dbo.sysdatabases
where has_dbaccess(name) = 1 -- Only look at databases to which we have access
fetch c1 into @name
begin
select @SQL = 'insert into #databases
select N'''+ @name + ''', sum(size) from '
+ QuoteName(@name) + '.dbo.sysfiles'
/* Insert row for each database */
execute (@SQL)
fetch c1 into @name
end
deallocate c1
DATABASE_NAME,
DATABASE_SIZE = size*8,/* Convert from 8192 byte pages to K */
RUN_DT=GETDATE()
from #databases
order by 1
create table DatabaseSizeReport
(Database_Name Varchar(32),
Database_Size int,
CreateDt datetime)
insert into DatabaseSizeReport exec usp_databases
select * from DatabaseSizeReport
ALT-F1 sp_help
CTRL-1 sp_who
CTRL-2 sp_lock
exec sp_spaceused <db_name>/<table_name>
exec xp_fileexist "c:/test.txt"
exec master..xp_getfiledetails "c:/test.txt"
--查看系统出错日志
set nocount on --执行一个查询或者是存储过程是要保证这个是开的。可以提高速度
create table #sunying_error_lg
(errortext varchar(500),
continuerow int)
insert into #sunying_error_lg exec master..xp_readerrorlog
select * from #sunying_error_lg
drop table #sunying_error_lg
--获得dbcc命令的完整列表
dbcc help('?')
--检测数据库损坏情况
alter database <dbname> set single_user with rollback immediate
dbcc checkdb (<dbname>,repair_fast)
1.检查SQL SERVER和Windows NT错误日志,看是否能找出问题所在。例如,可能硬盘驱动器已满。
2.以单用户模式启动SQL Server。
3.用@dbname参数执行sp_resetstatus(比如,sp_resetstatus @dbname="pubs")。来使数据库摆脱损坏状态
4.以单用户模式重新启动SQL Server。
5.如果数据库仍处于置疑状态,可将它重设回正常模式,并试着用下面命令转储置疑的数据库的事务:dump transaction Northwind with no_log
6.再次以单用户模式启动SQL Server,如果数据库出现了,可对其进行详细的DBCC检查(checkdb,checkalloc,等等)
7.运行一些随机查询,看看是否会遇到问题。
8.如果没有问题出现,可停止并重新启动SQL Server,然后将数据库投入生产应用。
--将数据库置于紧急模式
sp_configure 'allow updates',1
reconfigure with override
go
update master..sysdatabases set status=-32768 where name='pubs'
go
sp_configure 'allow updates',0
reconfigure with override
go
--当数据库处于这种模式时,你只能从中读取数据。
dbcc sqlperf(logspace)
dbcc sqlperf(lrustats)
dbcc opentran
--如果有事务是活动的比如(SPID:54 UID:1),还有看这个事务打开了多久了。如果有人忘了,可以用
--kill 54
--来干掉他
--查看用户使用set命令的全部内容
dbcc useroptions
--比如可以查看set nocount on
app_name()函数返回当前从SQL Server请求数据的应用程序名称。
get_date()函数返回SQL Server上的当前时间。
host_name()函数确定是哪台工作站正在连接到SQL Server。
system_user函数提供正在连接的用户的登陆名
db_name()告诉你连接是哪个数据库
drop table sunying_test
create table sunying_test (aid int identity,val varchar(500))
insert into sunying_test (val) select 'abc' 为1
insert into sunying_test (val) select 'abc' 为2
insert into sunying_test (val) select 'abc' 为3
select * from sunying_test
select @@identity
--在不同连接里查@@identity她返回null
select @@identity
select ident_current('<table_name>')
set statistics io on
select count(*) from sunying_test
sp_who
set nocount on
declare @strSQL varchar(255)
print 'Killing Users'
print '---------------------'
create table #tmpUsers(
spid int,
eid int,
status varchar(30),
loginname varchar(50),
hostname varchar(50),
blk int,
dbname varchar(50),
cmd varchar(30))
insert into #tmpUsers exec sp_who
declare logincursor cursor
read_only
for select spid,dbname from #tmpUsers where
declare @spid varchar(10)
declare @dbname2 varchar(40)
open logincursor
fetch next from logincursor into @spid,@dbname2
while (@@fetch_status<>-1)
begin
if (@@fetch_status<>-2)
begin
print 'Killing
set @strSQL='KILL
exec (@strSQL)
end
fetch next from logincursor into @spid,@dbname2
end
close logincursor
deallocate logincursor
drop table #tmpUsers
print 'Done'
go
usp_killusers 'crmnew'
select top n * from <tablename> --返回表中前n行记录
select top n percent * from <tablename> --返回表中最前面的n%行记录
--优化索引的充满度,她对索引的性能影响很大
/* --执行以后显示如下
DBCC SHOWCONTIG 正在扫描 'T_Contract_Pdt' 表...
表: 'T_Contract_Pdt'(124071728);索引 ID: 1,数据库 ID: 7
已执行 TABLE 级别的扫描。
- 扫描页数.....................................: 95
- 扫描扩展盘区数...............................: 14
- 扩展盘区开关数...............................: 40
- 每个扩展盘区上的平均页数.....................: 6.8
- 扫描密度[最佳值:实际值]....................: 29.27%[12:41]这个值不能低应该尽可能接近100%,低了说明有碎片
- 逻辑扫描碎片.................................: 18.95% --这个值高意味着表中存在很多碎片
- 扩展盘区扫描碎片.............................: 57.14% --这个值高意味着表中存在很多碎片
- 每页上的平均可用字节数.......................: 1800.2
- 平均页密度(完整)...........................: 77.76% --这个值是关键,系统默认是98%,这个值低的话说明有大量的插入操作。最好控制在85%-98%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/
dbcc dbreindex (<table_name>,'<index_name>',<fill factor>)
dbcc dbreindex (T_Contract_Pdt)
/* --执行以后显示如下
DBCC SHOWCONTIG 正在扫描 'T_Contract_Pdt' 表...
表: 'T_Contract_Pdt'(124071728);索引 ID: 1,数据库 ID: 7
已执行 TABLE 级别的扫描。
- 扫描页数.....................................: 75
- 扫描扩展盘区数...............................: 10
- 扩展盘区开关数...............................: 9
- 每个扩展盘区上的平均页数.....................: 7.5
- 扫描密度[最佳值:实际值]....................: 100.00%[10:10]
- 逻辑扫描碎片.................................: 0.00%
- 扩展盘区扫描碎片.............................: 0.00%
- 每页上的平均可用字节数.......................: 121.3
- 平均页密度(完整)...........................: 98.50%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/
dbcc indexdefrag (<db_name>,<table_name>,<index_name>)
select * from msdb..backupset
--查看登陆用户
select * from master..syslogins
select * from Northwind..sysusers
sp_change_users_login 'report'
--查看不匹配的用户
sp_change_users_login 'auto_fix', <username>
--纠正这个用户名,如果这个用户登陆不存在的话会创建他。也可以用Update_One参数修复如下
sp_change_users_login 'update_one', <username>,<loginname>
1.使用/Program Files/Microsoft SQL Server/80/Tools/Binn目录下的rebuildm.exe文件重建master数据库。重建master数据库可以使用你的数据库文件完整无缺。记得把数据文件和日志文件备份到其他地方。
2.使用-m参数启动SQL Server,这样可以以单用户模式重新启动SQL Server。
3.从最近一次已知最好的备份来还原master数据库。
4.核实master数据库是不是已经成功还原,确认所有数据库都已恢复正常并运行。从最近一次已知最好的备份来还原msdb数据库。
5.以普通模式停止和启动SQL Server
6.向生产用户开放数据库
--重建其他数据库。
/Program Files/Microsoft SQL Server/MSSQL/Install/
instmsdb.sql--msdb数据库
instnwnd.sql--Northwind数据库
instpubs.sql--pubs数据库
--注意重建msdb以后,作业,DTS包和其他关键信息将会丢失。重建以后要还原她
--查看执行计划
set statistics profile on
select * from course_info
set statistics profile off
--SQL SERVER2000推荐使用动态分配内存的方法,实例会在Windows操作系统的调度下动态获得内存。选中SQL Server保留物理内存复选框指定为SQLSERVER保留与内存设置相等的物理内存空间,这样操作系统不能使用为SQL SERVER保留的内存空间。在最小查询内存文本框里可以设置分配给每个用户执行查询的最小内存,默认为1024KB
--索引填充因子假如设置为60%那么就规定了在向索引页面中插入索引数据时最多可以占用的页面空间是(60%*8KB=4.8KB)。剩下的约40%(40%*8KB=3.2KB)的空间保留供索引的数据更新使用。如果更新后索引数据超出了原有索引页面的存储空间后,SQL SERVER2000会自动将原索引页面大致一半的数据迁移到新的页面中,称为页的分裂。页的分裂操作将会导致系统性能的严重下降。
--什么是检查点,如果系统崩溃进行恢复时,需要从头到尾扫描日志文件的内容,执行重做或者回滚的操作。如果没有检查点,每次恢复都要从头开始扫描,这对于大容量的日志文件来说,会导致恢复的时间比较长。有了检查点,就可以从距离发生故障点最近的检查点开始做起就可以了。可以大大减少恢复的时间。
--恢复间隔其实就是检查点发生频率的参数
--手动执行检查点
checkpoint;
select * from master..sysconfigures
C:/Program Files/Microsoft SQL Server/MSSQL/LOG
--master库是最重要的数据库存储系统信息,磁盘空间,文件分配和使用,系统级的配置参数,所有的登陆帐户信息,初始化信息和其他数据库信息等。
--msdb库是SQLSERVER代理服务使用的数据库。为报警,作业,任务调度和记录操作员操作提供存储空间。
--tempdb库是临时数据库,她为所有临时表,临时存储过程以及其他的临时操作提供空间。每次重起改数据库里的信息就是丢失。
--model库是存储了所有用户数据库和tempdb数据库的模板。
--启动
1.启动master库
2.启动model库
3.启动msdb库
4.清除tempdb库
5.启动tempdb库
dbcc help('?')
dbcc help('checkalloc')
dbcc traceon(3604)
go
dbcc useroptions
go
dbcc checkalloc('Northwind',repair_allow_data_loss|repair_fast|repair_rebuild)
repair_allow_data_loss:完成所有的修复,有可能会导致一些数据丢失
repair_fast:进行小的,不耗时的修复操作,不会有丢失数据
repair_rebuild:完成所有的修复,包括较长时间的修复比如重建索引
--检查数据库中系统表内及系统表间的一致性
dbcc checkcatalog('Northwind')
use Northwind
go
dbcc checkconstraints('Customers')
go
dbcc checkdb('Northwind')
use Northwind
go
dbcc checktable('Customers')
go
use pubs
go
dbcc checkident(jobs,noreseed|reseed new_reseed_value)
dbcc cleantable('Northwind','Customers')
--create index语句比较优点
--1.允许动态重建表的索引或为表定义的所有索引
--2.允许重建强制PRIMARY KEY或者UNIQUE约束的索引,而不必除去并重新创建些约束。
--3.允许使用一条语句重建表的所有索引,这比多个DROP INDEX和CREATE INDEX语句进行编码容易。
--4.可以优化SQL Server数据库的性能
--注意不能在系统表使用dbcc dbreindex
dbcc dbreindex('Northwind..Customers')
go
dbcc updateusage('pubs','authors')
go
--上面已经说过了碎片影响性能已经处理方法,这里就不在重复
dbcc indexdefrag(Northwind,Orders,CustomersOrders)
go
--将表驻留在内存中,和将表从内存中撤消。注意dbcc pintable适用于小表,使用时不要把大表驻留内存。这样会严重影响性能
use Northwind
set @db_id=db_id('Northwind')
set @tb1_id=object_id('Northwind..Customers')
dbcc pintable(@db_id,@tb1_id)
--收缩数据库,不会把物理文件大小进行收缩,对使用空间进行收缩,物理大小的收缩用dbcc shrinkfile
--Northwind数据库中的文件有10%的可以空间,
dbcc shrinkdatabase(Northwind,10)
--收缩物理文件大小
use Northwind
sp_helpfile
dbcc shrinkfile(1,1000M)
--可以用于性能测试,在不重起的情况下,清一下内存,在考察SQL语句的性能时就能得到SQL语句执行的物理IO执行情况
dbcc dropcleanbuffers
--1.查询已经装载的DLL
sp_helextendedroc
go
--2.从内存中释放系统存储过程xp_sendmail的DLL
dbcc xp_sendmail(free)
go
--1.显示用户连接的进程ID(SPID)
exec sp_who
--2.显示语句
dbcc inputbuffer(spid)
dbcc opentran('master')
use pubs
dbcc show_statistics(authors,UPKCL_auidind)
go
--显示指定表的数据和索引的碎片信息这个上面已经提过了
use <db_name>
dbcc showcontig(<table_name>)
go
--1.统计事务日志信息
dbcc sqlperf(logspace)
--2.统计线程管理信息
dbcc sqlperf(umsstats)
num user:当前UMS调度器使用的SQL Server线程数。
num runnable:实际上正在运行的SQL Server线程数。
num workers:线程池的大小,也就是实际上的工作者数量。
idle workers:当前空闲的工作者数量。
cntxt switches:在运行的线程间进行的上下文切换数。
cntxt switches(idle):空闲的线程间进行的上下文切换数。
--3.统计资源等待类型信息
dbcc sqlperf(waitstats)
--4.统计I/O资源消耗信息
dbcc sqlperf(iostats)
--5.统计先读信息
dbcc sqlperf(rastats)
--6.统计每个线程的资源消耗信息
dbcc sqlperf(threads)
dbcc cachestats
dbcc memorystatus
dbcc cursorstats
--显示缓存中先读和预先准备的SQL语句
dbcc sqlmgrstats
Number CSql Objects:缓存中的Transact-SQL语句总的数量
Number False Hits:到内存中去查找已经缓存的Transact-SQL语句而没有命中的值。该值应该尽可能低
--用于清除内存中的某个数据库的存储过程缓存内容
declear @intDBID integer
set @intDBID=(select dbid from master..sysdatabases where name='TESTDB01')
dbcc flushprocindb(@intDBID)
go
dbcc traceon(3604)
go
dbcc buffer(master,'sysobjects',2)
go
dbcc traceon(3604)
go
dbcc dbinfo(master)
go
dbcc traceon(3604)
go
dbcc dbtable(master)
go
dbcc traceon(3604)
go
dbcc ind(master,sysobjects,0)
go
--查看某个数据库使用的事务日志信息
dbcc traceon(3604)
go
dbcc log(crmnew,-1)
go
--显示过程缓冲池
dbcc traceon(3604)
go
dbcc procbuf(master,'sp_help',1,0)
go
--用于输出某个页面的每行指向的页面号
dbcc traceon(3604)
go
declare @dbid int,@objectid int
select @dbid=DB_ID('master')
select @objectid=object_id('sysobjects')
dbcc prtipage(@dbid,@objectid,1,0)
go
dbcc traceon(3604)
go
dbcc pss(ADMINISTRATOR,54,1)
go
dbcc traceon(3604)
go
dbcc resource
go
--用于查看数据页面的结构
dbcc traceon(3604)
go
declare @dbid int,@objectid int
select @dbid=DB_ID('master')
select @objectid=object_id('sysdatabases')
dbcc tab(@dbid,@objectid)
go
--查询SQL语句的读写代价
set statistics io on
go
select count(1) from Northwind..employees
go
set statistics io off
go
(所影响的行数为 1 行)
--查询SQL语句的执行时间
set statistics time on
go
select count(1) from Northwind..employees
go
set statistics time off
go
SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。
SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。
SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。
--查询SQL语句的执行计划
set showplan_text on
go
select count(1) from Northwind..employees
go
set showplan_text off
go
|--Stream Aggregate(DEFINE:([Expr1003]=Count(*)))
|--Index Scan(OBJECT:([Northwind].[dbo].[Employees].[PostalCode]))
--更加详细的执行计划
set showplan_all on
go
select count(1) from Northwind..employees
go
set showplan_all off
go
--成批SQL语句的执行时间
create table #save_time(start_time datetime not null)
insert #save_time values(getdate())
go
--批处理的脚本
select * from Northwind..customers
go
select * from Northwind..products
go
--批处理语句结束
select 'SQL语句的执行时间(ms)'=datediff(ms,start_time,getdate()) from #save_time
drop table #save_time
go
select * from master..sysxlogins
--事务操作
begin tran <事务名>
update t_a set val='123'
commit tran <事务名>
或者rollback tran <事务名>