七、 分区视图
分区视图是提高查询性能的一个很好的办法
--看下面的示例
--示例表 create table pubs.dbo.t_20( create table northwind.dbo.t_30( --分区视图 --插入数据 --更新数据 --删除测试 --显示结果 --删除测试 /**//*--测试结果 id name (所影响的行数为 3 行) |
八、 树型的实现
--参考
--树形数据查询示例 --示例数据 --查询指定id的所有子 --调用(查询所有的子) --删除测试 |
九、 排序问题
CREATE TABLE [t] ( [id] [int] IDENTITY (1, 1) NOT NULL , [GUID] [uniqueidentifier] NULL ) ON [PRIMARY] GO |
下面这句执行5次
insert t values (newid()) |
查看执行结果
select * from t |
1、 第一种
select * from t order by case id when 4 then 1 when 5 then 2 when 1 then 3 when 2 then 4 when 3 then 5 end |
2、 第二种
select * from t order by (id+2)%6 |
3、 第三种
select * from t order by charindex(cast(id as varchar),'45123') |
4、 第四种
select * from t WHERE id between 0 and 5 order by charindex(cast(id as varchar),'45123') |
5、 第五种
select * from t order by case when id >3 then id-5 else id end |
6、 第六种
select * from t order by id / 4 desc,id asc |
十、 一条语句删除一批记录
首先id列是int标识类类型,然后删除ID值为5,6,8,9,10,11的列,这里的cast函数不能用convert函数代替,而且转换的类型必须是varchar,而不能是char,否则就会执行出你不希望的结果,这里的"5,6,8,9,10,11"可以是你在页面上获取的一个chkboxlist构建成的值,然后用下面的一句就全部删除了,比循环用多条语句高效吧应该。
delete from [fujian] where charindex(','+cast([id] as varchar)+',',','+'5,6,8,9,10,11,'+',')>0 |
还有一种就是
delete from table1 where id in(1,2,3,4 ) |
十一、获取子表内的一列数据的组合字符串
下面这个函数获取05年已注册了的某个所的律师,唯一一个参数就是事务所的名称,然后返回zhuce字段里包含05字样的任何律师。
CREATE FUNCTION fn_Get05LvshiNameBySuo (@p_suo Nvarchar(50))RETURNS Nvarchar(2000)ASBEGINDECLARE @LvshiNames varchar(2000), @name varchar(50)select @LvshiNames=''DECLARE lvshi_cursor CURSOR FOR |