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>…From 表 2>…Where 条件 3>…Group by 列 4>…Having 筛选条件 6>…Order by 列 10.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 ;