创建数据库Sales,指定数据库文件和日志文件
create database Sales
on
(name='sales_dat',filename='d:\database\Salesdat.mdf',
size=10,
maxsize=50,
filegrowth=5)
log on
(name='Sales_log',filename='d:\database\salelog.ldf',
size=5MB,
MAXSIZE=25MB,
FILEGROWTH=5MB)
修改数据库并立即分配空间
alter database Sales
add file
(
       name=Salestest,
       filename='d:\database\Salestest.mdf',
       size=5mb,
       maxsize=100mb,
       filegrowth=5mb
)
删除数据库
drop database Sales
使用变量声明方式创建临时表
declare @tablevar table
(Cno int,Cname char(3))
insert into @tablevar values(1,'abc')
select * from @tablevar
 
select @@SERVERNAME --显示当前服务器名
exec sp_dropserver 'shenymce\shenymce' --删除当前服务器名
exec sp_addserver 'shenymce',’local’ --新建数据库服务器名只针对于以机器命名的服务器
create database one --创建数据库
use one --打开数据库
create table tt (id int,name char(10))--创建表
create table #T (id int,name char(10)) --创建本地临时表
create table ##T (id int,name char(10)) --创建全局临时表
select * from tt --显示表信息
exec sp_rename 'tt','ttt' --修改表名
exec sp_help ttt --显示表结构
alter table ttt add sex bit --添加新列
alter table ttt alter column sex char(2)--修改列
select * from ttt
alter table ttt drop column sex --删除列
exec sp_rename 'ttt.name',username --更改列名
判断表是否存在
if not exists(select * from sysobjects where [name] = 'ttt' and xtype='U')
begin
    select '测试'
end
修改数据库名称
use one
go
alter database one modify name=测试
查看数据库详细信息
exec sp_helpdb 测试
创建数据库快照
create database test_snap
on
(name=test,filename='D:\Program Files\Microsoft SQL Server\MSSQL10.SHENYMCE\MSSQL\DATA\test_!.mdf')
as snapshot of test
name后的test和of 后的test都是源数据库锃
filename后跟的是新建快照的文件路径不可以与源数据库的路径相同
还原快照
restore database test--数据库名
from database_snapshot = 'test_snap'--快照名
删除数据库快照
drop database test_snap --删除数据库快照与删除数据库类似
创建临时表
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY);--本地临时表,表名前加‘#’
INSERT INTO #MyTempTable VALUES (1);--全局临时表,表名前加‘##’
除非使用 DROP TABLE 显式删除临时表,否则临时表将在退出其作用域时由系统自动删除:
--创建规则
create rule age
as
@age between 0 and 100
--绑定规则
sp_bindrule age,'tt.shuxue'--参数:规则名,参数:对应表的列名
解除绑定
sp_unbindrule 'tt.shuxue'--对指定列解除规则绑定
删除规则
drop rule age--删除规则,只有不绑定任何列的规则才可以被删除
创建视图
create view v_info
as
select a.name,b.shuxue,b.yuwen,b.zongfeng
from info as a,tt as b where a.id=b.id
创建索引(下面创建的是一个唯一非聚集索引)
create unique nonclustered index i_info
on info(xuehao)
 
创建架构
create schema one authorization [guest] --one架构名guest所有者
分组
id sx yw zf sex
1     10    20    30    boy      
2     30    40    70    girle    
3     44    33    77    boy      
4     55    66    121 boy      
5     77    88    165 girle    
select sum(shuxue) as sxzf,sex from tt group by rollup (sex)
sxzf sex
109        boy      
107        girle    
216        NULL
Group by 有二个关键字rollup和 cube
Having 子句
select sum(shuxue) as sxzf,sex from tt group by (sex)
having sum(shuxue)>=108
update 中的from 子句
update info
set zongfeng=b.shuxue+b.yuwen
from info a join tt b on a.id=b.id
上面语句的含义是,当info表中的id=tt表中的id时从tt表中更新info表中的zongfeng, (join on 对二表进行关联)
compute by 子句 (统计)
select * from tt order by sex
compute sum(zongfeng),avg(zongfeng),max(zongfeng),min(zongfeng)
by sex
上面是对TT表中的zongfeng字段按sex分类,分别进行求和,平均值,最大值,最小值进行统计
注意:在使用by子句时,需要先使用ORDER BY进行排序
 
select top 10 percent * from tt --显示前百分之十的记录
使用变量
declare @i int
set @i=2
select top (@i) * from tt
with ties 子句(只有使用了order by 子句才可以使用)
select top 1 with ties * from tt order by sex—如果满足条件的最后一条记录有重复记录,那么重复的记录也将显示
基本的多表连接
select b.name,a.shuxue,a.yuwen,a.zongfeng
from tt a, info b
where a.id=b.id
 
内连接( 全匹配,不匹配的不显示)
select b.name,a.shuxue,a.yuwen,a.zongfeng
from tt a join info b
on a.id=b.id--后可以接where子句,条件放大on与放在where后面结果一样
where a.zongfeng > 40
 
左外连接--左表为主表( 外连接分为左,右,全三种外连接,按主表匹配, 不匹配的补空)
select b.name,a.shuxue,a.yuwen,a.zongfeng
from tt a left join info b
on a.id=b.id--后可以接where子句,条件放大on与放在where后面结果不同
where a.zongfeng > 40
右外连接—右表为主表使用right outer join on(左外连接与右外连接只是主从表互换)
全连接 full outer join on
 
交叉连接( 返回二表中记录的秉积,功能与基本连接类似,cross join)
 
自连接
 
联合查询(相当于将多个查询语句统一到一个查询语句中)
select shuxue,yuwen,''
from tt
where sex='boy'
union
select sum(shuxue),sum(yuwen),'总分'
from tt
where sex='boy'
 
子查询
select a.name,b.zongfeng,b.sex
from info a, tt b
where a.id=b.id and a.zongfeng=(select MIN(zongfeng) from tt)
 
EXISTS关键字,判断查询的结果是否为真
declare @username varchar(10)
declare @pwd varchar(10)
set @username='shen'
set @pwd='boy'
if exists(select * from tt a,info b where b.name=@username and a.sex=@pwd and a.id=b.id)
print'登录成功!'
else
print'登录失败'
 
 
交查询(查询二个查询语句中的交集 intersect ,第一个查询语句后不可以跟order by子句,第二个不用嵌套进行查询的话,将对整个查询语句进行排序)
 
select a.zongfeng,a.sex,b.name,b.xuehao
from tt a, info b
where a.sex='girle' and a.id=b.id
intersect
select c.zongfeng,c.sex,c.name,c.xuehao
from(
select top 3 a.zongfeng,a.sex,b.name,b.xuehao
from tt a, info b
where a.id=b.id order by a.zongfeng desc
)c
 
差查询(先对第一个查询语句进行查询,在第一个查询结果的基础上再减去第二个查询语句与之相交的记录)
 
select a.zongfeng,a.sex,b.name,b.xuehao
from tt a, info b
where a.sex='girle' and a.id=b.id
EXCEPT
select c.zongfeng,c.sex,c.name,c.xuehao
from(
select top 3 a.zongfeng,a.sex,b.name,b.xuehao
from tt a, info b
where a.id=b.id order by a.zongfeng desc
)c
 
XML查询
create table xml_table
(
s_id int,
s_data xml
)
 
insert into xml_table
values
(
1 ,
'<学生信息><姓名>陈苗</姓名><性别>男</性别><班级>计算机应用班</班级></学生信息>'
)
select * from xml_table
 
 
declare @date xml
set @date = (select s_data from xml_table where s_id=1)
select @date.query('学生信息/姓名') 姓名 ,@date.query('学生信息/性别') 性别,@date.query('学生信息/班级') 班级
 
FOR XML(将查询结果保存到表中,有四种模式,分别是RAW,AUTO,EXPLICIT,PATH)
select a.zongfeng,a.sex,b.name,b.xuehao
from tt a, info b
where  a.id=b.id
for xml path
 
T-SQL中的逻辑运算符
ALL/ANY/AND/NOT/BETWEEN/SOME/LIKE/IN/EXISTS/OR
T-SQL中的基本运算符
+ / - / * / / / %
 
T-SQL中的注释
单选注释--这是单行注释
多行注释
/*
这里是多行注释的内容
*/
 
在嵌套语句中包含多条语句 可以使用
begin
end
将多条语句包括在其中
 
Case语句必须有一个变量来接受他的结果
declare @one int
declare @two varchar(20)
set @one=3
select @two = case @one
when 1 then '结果是'
when 2 then '结果是'
else '不知道是什么'
end
print @two
 
declare @num int ,@i int
set @i=1
set @num=0
while (@i<100 )
begin
if @i%2=1
begin
    set @num=@num+@i
    set @i=@i+1
    print '@i='
    print @i
    print '@num='
    print @num
    continue
end
else
begin
    if @i>10 break
    set @i=@i+1
    print @i
    continue
end
end
print @num
 
等待执行命令 WAITFOR
 
waitfor delay '00:00:05'--跟间隙时间
print '5秒后执行了'
 
waitfor time '11:07:00' --跟具体时间
print '11:07分执行的'
 
goto 跳转语句
declare @i int
set @i=1
while @i<110
begin
    if @i=1 goto one--跳转到指定标记
    if @i>1 and @i<5 goto two
end
one:
print '等于'
two:--定义一个标记
print '大于小于'
goto three
three:
print'下一次就要大于五了'
 
try catch 错误处理语句
declare @i int
begin try
set @i=1/0
end try
 
begin catch
print ERROR_LINE()
print ERROR_MESSAGE()
print '除数不可以为0'
end catch
 
结果
3
遇到以零作除数错误。
除数不可以为0
 
数学函数
declare @i float,@a int
set @i=12.234
set @a=100
select round(@i,2)as 保留位小数,CEILING(@i) as 大于@I的最小整数, FLOOR(@i)as 小于@I的最大整数,SQUARE(@a) as 平方 ,SQRT(@a) as 开方, POWER(@a,3) as 三次幂
字符串函数
declare @str varchar(44)
set @str='happy a life'
select UPPER(@str) 变大写, ASCII('a') 求ASCII, CHAR(55)查看对应字符, STR(10)+'12' 变字符, REPLACE(@str,' a' ,' all') 替换,REPLICATE('a',5 )重复, CHARINDEX('a',@str) 查找字符串起始位置 ,PATINDEX('a%p',@str+'a') 使用通配符
 
 
聚合函数
AVG SUM MAX MIN COUNT
 
日期函数
SELECT GETDATE() 现在日期, YEAR(GETDATE())年 ,month(GETDATE())月 ,day(GETDATE())日,DATEADD(dd,30 ,GETDATE())相差, DATEDIFF(DD,GETDATE(),'2011-1-25')距离
 
元数据
declare @a varchar(10)
set @a='10'
print Isnumeric(@a)--判断是否为数字
print convert(int,@a*12)--强制类型转换
print isnull(@a,'为空时返回的值')--是否为空值
 
标量值函数
 
CREATE FUNCTION onefun(@a int) --定义函数
RETURNS int--返回类型
AS
BEGIN
declare @num int,@sum int
  set @num=1
  set @sum=0
  while @num<@a
  begin
  set @num=@num+1
  set @sum=@sum+@num
  end
  return @sum --返回值
 
END
GO
 
游标的操作
--创建游标
declare one_cursor scroll cursor
for
select * from tt
for read only
 
open one_cursor--打开游标
--检索游标 FIRST 第一行 LAST 最后行 PRIOR 前一行 NEXT 下一行 ABSOLUTE N 第N行RELATIVE N 当前行后N行
fetch RELATIVE 2 from one_cursor
select @@FETCH_STATUS --返回游标状态,成功-1失败-2行不存在
CLOSE  ONE_CURSOR--关闭游标
deallocate one_cursor--释放游标
 
事务
事务模式:自动提交事务,显式事务(以BIGIN TRANSACTION 语句显式开始),隐式事务,批处理级事务
 
事务管理语句
BEGIN TRANSACTION 开始事务
COMMIT TRANSACTION 提交事务
ROLLBACK TRANSACTION 回滚事务
SAVE TRANSACTION 保存事务
 
begin TRANSACTION
declare @fight int
set @fight=0
delete from info where id=2
if @fight = 0
begin
  commit transaction --提交事务
end
else
  rollback transaction --回滚事务
 
XACT_ABORT 选项 错误是否自动回滚
  set xact_abort on
 
锁(封锁 LOCK 解锁 UNLOCK)
可封锁的单位有:行,页,表,盘区和数据库
锁的类型
共享(S)锁 用于读操作,多个事务共用
独占(X)锁,用于写操作,仅一个事务使用
更新(U)锁 用于对页施加X锁
 
死锁(两个或多个进程因争夺资源而造成互相等待的现象)
 
存储过程
create procedure proc_1 --创建存储过程
@one varchar(10) --设置参数,在此赋值可以设置默认值 @two varchar(10)=’boy’
as
select * from tt where sex=@one
 
exec proc_1 'boy' --调用存储过程
 
存储过程中的输出参数
create procedure proc_1 --创建存储过程
@one int, --设置参数
@two int output --设置输出参数
as
select @two=zongfeng from tt where id=@one
 
declare @two int
exec proc_1 'boy' ,@two output --调用存储过程,注意调用方式
select @two
 
 
exec sp_helptext proc_1 –查看存储过程内容
 
create proc #show    --创建临时存储过程
as
   select * from info
create proc #show    --创建全局临时存储过程
as
   select * from info
 
使用alter proc关键字修改存储过程
使用drop proc关键字删除存储过程