首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

t_sql技艺

2012-07-15 
t_sql技巧一、 只复制一个表结构,不复制数据create function f_cid(@id int)returns @re table([id] int,[l

t_sql技巧
一、 只复制一个表结构,不复制数据

create function f_cid(@id int)returns @re table([id] int,[level] int)asbegin declare @l int set @l=0 insert @re select @id,@l while @@rowcount>0 begin  set @l=@l+1  insert @re select a.[id],@l  from [tb] a,@re b  where a.[pid]=b.[id] and b.[level]=@l-1 end/**//*--如果只显示最明细的子(下面没有子),则加上这个删除 delete a from @re a where exists(  select 1 from [tb] where [pid]=a.[id])--*/ returnendgo--调用(查询所有的子)select a.*,层次=b.[level] from [tb] a,f_cid(2)b where a.[id]=b.[id]go--删除测试drop table [tb]drop function f_cidgo


九、 排序问题
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)
AS
BEGIN 
DECLARE @LvshiNames varchar(2000), @name varchar(50)
select @LvshiNames=''
DECLARE lvshi_cursor CURSOR FOR

热点排行