SqlServer 常见问题及语法

1.常见问题解决 

当sa登陆失败时:安全性-登录名-sa-授权sa登陆;常规-修改密码;用windows登陆-当前实例-属性-安全性-选中sqlserver和Windows身份验证;然后重新启动服务;net start mssqlserver

改变表结构出错:工具-选项-des..-取消阻止保存。。

2.sql语法

1.创建数据库
create datebase  sqlName  
on primary   --这是主文件
(
name='mydb',filename='d:\db\mydb.mdf',size=10mb,maxsize=100mb,filegrowth=10mb
)
log on   --这是日志文件
(
name='mydb_log',filename='d:\db\mydb.ldf',size=10mb,max
)
go -- 批处理;是工具代码,不是Tsql 代码

2.判断一个表是否存在:
1>. if object_id('tab') is not null
2>.if not exists(select count(*) from sysobjects where name='tab' and type='u')

3.选择插入:inset into newTable select name ,sex from T_name :newTable必须存在
select * into NewT_name from T_name  将一个表的数据备份到另一个新表(必须不存在)中。 

4.自增列的插入:set identify_insert T_name on/off 打开后也可以像自增列插入内容,但以后每次都要插入。如果不,关闭即可。

5.with 用法
With tab as :
Demo: 
with tabs as(
Select row_number() over(order by id)as q,* from Users
)
select * from tabs where q >10 and q<21
With as 注意:上一条sql语句必须以 ' ; '  结尾 或者go一下;并且下一条语句一定要用的with的表

6.删除数据语法
delete from T_name  自动编号不会还原;删除数据慢;可以删除部分数据;删除会记录日志
truncate table T_name  自动编号会还原;删除数据快;删除所有数据;不会记录日志
Drop table 彻底删除表

1> 删除重复数据:先找到每组中最大的数据的id 然后排除的删掉即可
delete from #newInfo where id not in
(select max(id) from #newInfo group by name,course,grade)

@1.删除tid最大的重复数据
 delete from #tab where tid in 
 (select max(tid) from #tab group by name ,course,grade having COUNT(*)>1)
@2.重复数据太多时,Delete会比较慢 所以可以:将不重复数据放到备份表中;删除原来的表;用备份表作为新表;
   select distinct name,course,grade ,identity(int,1,1)as tid into #newtab 
   from #tab group by name,course,grade  注意distinct只能放到前面;
 2>.在原来表的基础上删除重复数据.
 @1.找到重复数据的tid
with #tid as
(select a.tid from #tab as a  inner join (
select distinct name,course,grade from #tab group by name,course,grade
having COUNT(tid)>1)as t 
on t.name=a.name and a.course=t.course and t.grade=t.grade)
@2.删除 top 后面的值是count(*)-1
delete from #tab where tid in ( select top 1 tid from #tid)

7.纵表转横标 
select name, sum(case course when 'chinese' then grade else 0 end)chinese
from info group by name

select name, sum(case when course='chinese' then grade else 0 end )chinese 
from info group by name

8.聚合查询:
between 10 and 20: 10到20之间 包括10和20 
in(10,20) :只能是10和20
--模糊查询: like  
%:任意多个任意字符;姓李的 李%,包含李的 %%
_: 任意的单个字符; 姓李的两个字的 李_
[]:中括号中的任意字符;与正则表达式相同
^: 非。同 not like 
转义用[]括起来
--null值:不能用= ,<> 比较,应该用is ,is not
isnull函数 select isnull(sname,' 佚名') from student where .......
null、‘ ’和NULL 是不同的;
C#中用DBNull 来判断数据库中的NULL值;Convert.IsDBNull(object);
如果向数据库中导入空值:用DBNull.Value;注意DBNull的父类是object。不能和字符串进行转换

9.SQL语句的执行顺序: 定位—过滤—映射—排序
5>Select 5-1>选择列,5-2>distinct,5-3>top(应用top选项最后计算)
1>From2>Where 条件  
3>Group by 列  
4>Having 筛选条件 
6>Order by10.Case 用法
Update Personnel  set salary = 
case 
 when salary >= 5000 then salary * 0.9     
 when salary >= 2000 and salary < 4600 then salary * 1.15     
else salary end ;  

 

posted @ 2013-05-27 17:13  leiq  阅读(478)  评论(0编辑  收藏  举报