在做东西的时候 经常要加入很多测试数据,总不能一条一条的录吧
复制数据的sql,标记一下 免得又搞忘了。
INSERT INTO hospital (hospitalName,functionary,telphone,address,stateid,agencyid) select hospitalName,functionary,telphone,address,stateid,agencyid FROM Hospital
mssql数据库自带的函数
遍历所有表
exec sp_msforeachtable 'select top 2 * from ?'
偶然翻黄师兄的代码 记得有个 select count(*) from(select * from tb) 的来查询一个sql查询的记录行数 今天怎么写都不对
不得已又翻出来看 是 select count( *) from (select id from stuinfo) a 后面必须要带一个a 不然就不对
还可以这样 select a.* from (select * from stuinfo) a 哇 好神奇 以前没想到可以这样搞
今天考过滤有重名字的sql知道用聚合函数 结果把 聚合函数的过滤sql又搞忘了 是having ,>1代表有重复的
select stuname ,COUNT(id) from stuinfo group by stuname having count(id)>1
题里还出了啥写啥树状sql查询 我擦 这啥玩意 听都没听说过 ,网上一搜 还真有
原来叫啥CTE 公共表表达式 sqlserver2005里才有的。
来看一个例子:
create table tb(id varchar(3) , pid varchar(3) , name nvarchar(10))
insert into tb values('001' , null , N'广东省')
insert into tb values('002' , '001' , N'广州市')
insert into tb values('003' , '001' , N'深圳市')
insert into tb values('004' , '002' , N'天河区')
insert into tb values('005' , '003' , N'罗湖区')
insert into tb values('006' , '003' , N'福田区')
insert into tb values('007' , '003' , N'宝安区')
insert into tb values('008' , '007' , N'西乡镇')
insert into tb values('009' , '007' , N'龙华镇')
insert into tb values('010' , '007' , N'松岗镇')
WITH Tree
AS
(
SELECT id,pid,name FROM tb P WHERE P.Id = '003' -- parent id
UNION ALL
SELECT C.Id,C.pid,C.name FROM tb C
INNER JOIN Tree T ON C.pid = T.Id
)
SELECT * FROM Tree
试了一下确实可以 好神奇 ,为什么这么神奇原理在哪里 以前我们都要用c#代码写递归的
关键在于那个with 刚刚说了CTE公共表表达式2005里才有的。 他的作用是with 出一个临时表 供后面使用
来个简单点的例子:
with ss
as
(select id from stuinfo where id>3)
select * from ss
这样简单噻 一看就明白 ,输出:
id
4
5
6
上面的异曲同工 ,奥妙就在于 在with括号里面的sql他又使用了with的临时变量 这样就形成了递归调用 ,所以可以查询出树状结构咯。
rownumber:
select ROW_NUMBER() over(order by id desc),id from stuinfo
关于删除重复数据的:
delete from stuinfo where stuname in( select stuname from stuinfo group by stuname having count(id) >1) and
id not in(select min(id) from stuinfo group by stuname having count(stuname)>1)
原理是首先count>1则代表有重复的 ,然后根据stunamegroup 只要>1则代表有多个同名stuname 。如果只是此条件则会把所有重名全部删除。
第二个子查询则是查询那些同名的最小id ,然后两个组合 删除所有重名的并把最小id排除不删。