整理了一些t-sql技巧

时间:2022-01-28 18:00:44

                                      整理了一些t-sql技巧

                                     选择自 kingwkb 的 Blog

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

 

整理了一些t-sql技巧select   top   0   *   into   [ t1 ]   from   [ t2 ]


二、 获取数据库中某个对象的创建脚本

1、 先用下面的脚本创建一个函数

整理了一些t-sql技巧if   exists ( select   1   from  sysobjects  where  id = object_id ( ' fgetscript ' and   objectproperty (id, ' IsInlineFunction ' ) = 0 )
整理了一些t-sql技巧 
drop   function  fgetscript
整理了一些t-sql技巧
go
整理了一些t-sql技巧
整理了一些t-sql技巧
create   function  fgetscript(
整理了一些t-sql技巧 
@servername   varchar ( 50 )      -- 服务器名
整理了一些t-sql技巧
 , @userid   varchar ( 50 ) = ' sa '      -- 用户名,如果为nt验证方式,则为空
整理了一些t-sql技巧
 , @password   varchar ( 50 ) = ''      -- 密码
整理了一些t-sql技巧
 , @databasename   varchar ( 50 )     -- 数据库名称
整理了一些t-sql技巧
 , @objectname   varchar ( 250 )     -- 对象名
整理了一些t-sql技巧

整理了一些t-sql技巧
returns   varchar ( 8000 )
整理了一些t-sql技巧
as
整理了一些t-sql技巧
begin
整理了一些t-sql技巧 
declare   @re   varchar ( 8000 )         -- 返回脚本
整理了一些t-sql技巧
  declare   @srvid   int , @dbsid   int         -- 定义服务器、数据库集id
整理了一些t-sql技巧
  declare   @dbid   int , @tbid   int          -- 数据库、表id
整理了一些t-sql技巧
  declare   @err   int , @src   varchar ( 255 ),  @desc   varchar ( 255 -- 错误处理变量
整理了一些t-sql技巧

整理了一些t-sql技巧
-- 创建sqldmo对象
整理了一些t-sql技巧
  exec   @err = sp_oacreate  ' sqldmo.sqlserver ' , @srvid  output
整理了一些t-sql技巧 
if   @err <> 0   goto  lberr
整理了一些t-sql技巧
整理了一些t-sql技巧
-- 连接服务器
整理了一些t-sql技巧
  if   isnull ( @userid , '' ) = ''   -- 如果是 Nt验证方式
整理了一些t-sql技巧
  begin
整理了一些t-sql技巧  
exec   @err = sp_oasetproperty  @srvid , ' loginsecure ' , 1
整理了一些t-sql技巧  
if   @err <> 0   goto  lberr
整理了一些t-sql技巧
整理了一些t-sql技巧  
exec   @err = sp_oamethod  @srvid , ' connect ' , null , @servername
整理了一些t-sql技巧 
end
整理了一些t-sql技巧 
else
整理了一些t-sql技巧  
exec   @err = sp_oamethod  @srvid , ' connect ' , null , @servername , @userid , @password
整理了一些t-sql技巧
整理了一些t-sql技巧 
if   @err <> 0   goto  lberr
整理了一些t-sql技巧
整理了一些t-sql技巧
-- 获取数据库集
整理了一些t-sql技巧
  exec   @err = sp_oagetproperty  @srvid , ' databases ' , @dbsid  output
整理了一些t-sql技巧 
if   @err <> 0   goto  lberr
整理了一些t-sql技巧
整理了一些t-sql技巧
-- 获取要取得脚本的数据库id
整理了一些t-sql技巧
  exec   @err = sp_oamethod  @dbsid , ' item ' , @dbid  output, @databasename
整理了一些t-sql技巧 
if   @err <> 0   goto  lberr
整理了一些t-sql技巧
整理了一些t-sql技巧
-- 获取要取得脚本的对象id
整理了一些t-sql技巧
  exec   @err = sp_oamethod  @dbid , ' getobjectbyname ' , @tbid  output, @objectname
整理了一些t-sql技巧 
if   @err <> 0   goto  lberr
整理了一些t-sql技巧
整理了一些t-sql技巧
-- 取得脚本
整理了一些t-sql技巧
  exec   @err = sp_oamethod  @tbid , ' script ' , @re  output
整理了一些t-sql技巧 
if   @err <> 0   goto  lberr
整理了一些t-sql技巧
整理了一些t-sql技巧 
-- print @re
整理了一些t-sql技巧
  return ( @re )
整理了一些t-sql技巧
整理了一些t-sql技巧lberr:
整理了一些t-sql技巧 
exec  sp_oageterrorinfo  NULL @src  out,  @desc  out 
整理了一些t-sql技巧 
declare   @errb   varbinary ( 4 )
整理了一些t-sql技巧 
set   @errb = cast ( @err   as   varbinary ( 4 ))
整理了一些t-sql技巧 
exec  master..xp_varbintohexstr  @errb , @re  out
整理了一些t-sql技巧 
set   @re = ' 错误号:  ' + @re
整理了一些t-sql技巧   
+ char ( 13 ) + ' 错误源:  ' + @src
整理了一些t-sql技巧   
+ char ( 13 ) + ' 错误描述:  ' + @desc
整理了一些t-sql技巧 
return ( @re )
整理了一些t-sql技巧
end
整理了一些t-sql技巧
go
整理了一些t-sql技巧
整理了一些t-sql技巧

2、 用法如下
用法如下,

整理了一些t-sql技巧print  dbo.fgetscript( ' 服务器名 ' , ' 用户名 ' , ' 密码 ' , ' 数据库名 ' , ' 表名或其它对象名 ' )
整理了一些t-sql技巧

3、 如果要获取库里所有对象的脚本,如如下方式

整理了一些t-sql技巧declare   @name   varchar ( 250 )
整理了一些t-sql技巧
declare  #aa  cursor   for
整理了一些t-sql技巧 
select  name  from  sysobjects  where  xtype  not   in ( ' S ' , ' PK ' , ' D ' , ' X ' , ' L ' )
整理了一些t-sql技巧
open  #aa
整理了一些t-sql技巧
fetch   next   from  #aa  into   @name
整理了一些t-sql技巧
while   @@fetch_status = 0
整理了一些t-sql技巧
begin
整理了一些t-sql技巧 
print  dbo.fgetscript( ' onlytiancai ' , ' sa ' , ' sa ' , ' database ' , @name )
整理了一些t-sql技巧 
fetch   next   from  #aa  into   @name
整理了一些t-sql技巧
end
整理了一些t-sql技巧
close  #aa
整理了一些t-sql技巧
deallocate  #aa
整理了一些t-sql技巧

4、 声明,此函数是csdn邹建邹老大提供的
三、 分隔字符串
如果有一个用逗号分割开的字符串,比如说"a,b,c,d,1,2,3,4",如何用t-sql获取这个字符串有几个元素,获取第几个元素的值是多少呢?因为t-sql里没有split函数,也没有数组的概念,所以只能自己写几个函数了。
1、 获取元素个数的函数

整理了一些t-sql技巧create   function  getstrarrlength ( @str   varchar ( 8000 ))
整理了一些t-sql技巧
returns   int
整理了一些t-sql技巧
as
整理了一些t-sql技巧
begin
整理了一些t-sql技巧  
declare   @int_return   int
整理了一些t-sql技巧  
declare   @start   int
整理了一些t-sql技巧  
declare   @next   int
整理了一些t-sql技巧  
declare   @location   int
整理了一些t-sql技巧  
select   @str   = ' , ' +   @str   + ' , '
整理了一些t-sql技巧  
select   @str = replace ( @str , ' ,, ' , ' , ' )
整理了一些t-sql技巧  
select   @start   = 1
整理了一些t-sql技巧  
select   @next   = 1  
整理了一些t-sql技巧  
select   @location   =   charindex ( ' , ' , @str , @start )
整理了一些t-sql技巧  
while  ( @location   <> 0 )
整理了一些t-sql技巧  
begin
整理了一些t-sql技巧    
select   @start   =   @location   + 1
整理了一些t-sql技巧    
select   @location   =   charindex ( ' , ' , @str , @start )
整理了一些t-sql技巧    
select   @next   = @next   + 1
整理了一些t-sql技巧  
end
整理了一些t-sql技巧 
select   @int_return   =   @next - 2
整理了一些t-sql技巧 
return   @int_return
整理了一些t-sql技巧
end
整理了一些t-sql技巧

2、 获取指定索引的值的函数

整理了一些t-sql技巧create   function  getstrofindex ( @str   varchar ( 8000 ), @index   int   = 0 )
整理了一些t-sql技巧
returns   varchar ( 8000 )
整理了一些t-sql技巧
as
整理了一些t-sql技巧
begin
整理了一些t-sql技巧  
declare   @str_return   varchar ( 8000 )
整理了一些t-sql技巧  
declare   @start   int
整理了一些t-sql技巧  
declare   @next   int
整理了一些t-sql技巧  
declare   @location   int
整理了一些t-sql技巧  
select   @start   = 1
整理了一些t-sql技巧  
select   @next   = 1   -- 如果习惯从0开始则select @next =0
整理了一些t-sql技巧
   select   @location   =   charindex ( ' , ' , @str , @start )
整理了一些t-sql技巧  
while  ( @location   <> 0   and   @index   >   @next  )
整理了一些t-sql技巧  
begin
整理了一些t-sql技巧    
select   @start   =   @location   + 1
整理了一些t-sql技巧    
select   @location   =   charindex ( ' , ' , @str , @start )
整理了一些t-sql技巧    
select   @next   = @next   + 1
整理了一些t-sql技巧  
end
整理了一些t-sql技巧  
if   @location   = 0   select   @location   = len ( @str ) + 1   -- 如果是因为没有逗号退出,则认为逗号在字符串后
整理了一些t-sql技巧
   select   @str_return   =   substring ( @str , @start , @location   - @start -- @start肯定是逗号之后的位置或者就是初始值1
整理了一些t-sql技巧
   if  ( @index   <>   @next  )  select   @str_return   =   ''   -- 如果二者不相等,则是因为逗号太少,或者@index小于@next的初始值1。
整理了一些t-sql技巧
   return   @str_return
整理了一些t-sql技巧
end
整理了一些t-sql技巧

3、 测试

整理了一些t-sql技巧SELECT   [ dbo ] . [ getstrarrlength ] ( ' 1,2,3,4,a,b,c,d ' )
整理了一些t-sql技巧
SELECT   [ dbo ] . [ getstrofindex ] ( ' 1,2,3,4,a,b,c,d ' , 5 )
整理了一些t-sql技巧

四、 一条语句执行跨越若干个数据库
我要在一条语句里操作不同的服务器上的不同的数据库里的不同的表,怎么办呢?
第一种方法:

整理了一些t-sql技巧select   *   from   OPENDATASOURCE ( ' SQLOLEDB ' , ' Data Source=远程ip;User ID=sa;Password=密码 ' ).库名.dbo.表名
整理了一些t-sql技巧

第二种方法:
先使用联结服务器:

整理了一些t-sql技巧EXEC  sp_addlinkedserver  ' 别名 ' , '' , ' MSDASQL ' , NULL , NULL , ' DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码; '
整理了一些t-sql技巧
exec  sp_addlinkedsrvlogin   @rmtsrvname = ' 别名 ' , @useself = ' false ' , @locallogin = ' sa ' , @rmtuser = ' sa ' , @rmtpassword = ' 密码 '
整理了一些t-sql技巧
GO
整理了一些t-sql技巧

然后你就可以如下:

整理了一些t-sql技巧select   *   from  别名.库名.dbo.表名
整理了一些t-sql技巧
insert  库名.dbo.表名  select   *   from  别名.库名.dbo.表名
整理了一些t-sql技巧
select   *   into  库名.dbo.新表名  from  别名.库名.dbo.表名
整理了一些t-sql技巧
go
整理了一些t-sql技巧

五、 怎样获取一个表中所有的字段信息
蛙蛙推荐:怎样获取一个表中所有字段的信息
先创建一个视图

整理了一些t-sql技巧Create   view  fielddesc    
整理了一些t-sql技巧
as
整理了一些t-sql技巧
select  o.name  as  table_name,c.name  as  field_name,t.name  as  type,c.length  as  
整理了一些t-sql技巧
整理了一些t-sql技巧length,c.isnullable 
as  isnullable, convert ( varchar ( 30 ),p.value)  as  desp 
整理了一些t-sql技巧
from  syscolumns c  
整理了一些t-sql技巧
join  systypes t  on  c.xtype  =  t.xusertype
整理了一些t-sql技巧
join  sysobjects o  on  o.id = c.id 
整理了一些t-sql技巧
left   join     sysproperties p  on  p.smallid = c.colid  and  p.id = o.id    
整理了一些t-sql技巧
where  o.xtype = ' U '
整理了一些t-sql技巧
整理了一些t-sql技巧

查询时:

整理了一些t-sql技巧Select   *   from  fielddesc  where  table_name  =   ' 你的表名 '

 

还有个更强的语句,是邹建写的,也写出来吧

整理了一些t-sql技巧SELECT  
整理了一些t-sql技巧 (
case   when  a.colorder = 1   then  d.name  else   ''   end ) N ' 表名 ' ,
整理了一些t-sql技巧 a.colorder N
' 字段序号 ' ,
整理了一些t-sql技巧 a.name N
' 字段名 ' ,
整理了一些t-sql技巧 (
case   when   COLUMNPROPERTY ( a.id,a.name, ' IsIdentity ' ) = 1   then   ' ' else   ''   end ) N ' 标识 ' ,
整理了一些t-sql技巧 (
case   when  ( SELECT   count ( * )
整理了一些t-sql技巧 
FROM  sysobjects
整理了一些t-sql技巧 
WHERE  (name  in
整理了一些t-sql技巧           (
SELECT  name
整理了一些t-sql技巧          
FROM  sysindexes
整理了一些t-sql技巧          
WHERE  (id  =  a.id)  AND  (indid  in
整理了一些t-sql技巧                    (
SELECT  indid
整理了一些t-sql技巧                   
FROM  sysindexkeys
整理了一些t-sql技巧                   
WHERE  (id  =  a.id)  AND  (colid  in
整理了一些t-sql技巧                             (
SELECT  colid
整理了一些t-sql技巧                            
FROM  syscolumns
整理了一些t-sql技巧                            
WHERE  (id  =  a.id)  AND  (name  =  a.name)))))))  AND
整理了一些t-sql技巧        (xtype 
=   ' PK ' )) > 0   then   ' '   else   ''   end ) N ' 主键 ' ,
整理了一些t-sql技巧 b.name N
' 类型 ' ,
整理了一些t-sql技巧 a.length N
' 占用字节数 ' ,
整理了一些t-sql技巧 
COLUMNPROPERTY (a.id,a.name, ' PRECISION ' as  N ' 长度 ' ,
整理了一些t-sql技巧 
isnull ( COLUMNPROPERTY (a.id,a.name, ' Scale ' ), 0 as  N ' 小数位数 ' ,
整理了一些t-sql技巧 (
case   when  a.isnullable = 1   then   ' ' else   ''   end ) N ' 允许空 ' ,
整理了一些t-sql技巧 
isnull (e. text , '' ) N ' 默认值 ' ,
整理了一些t-sql技巧 
isnull (g. [ value ] , '' AS  N ' 字段说明 '
整理了一些t-sql技巧
-- into ##tx
整理了一些t-sql技巧

整理了一些t-sql技巧
FROM   syscolumns  a  left   join  systypes b 
整理了一些t-sql技巧
on   a.xtype = b.xusertype
整理了一些t-sql技巧
inner   join  sysobjects d 
整理了一些t-sql技巧
on  a.id = d.id   and   d.xtype = ' U '   and   d.name <> ' dtproperties '
整理了一些t-sql技巧
left   join  syscomments e
整理了一些t-sql技巧
on  a.cdefault = e.id
整理了一些t-sql技巧
left   join  sysproperties g
整理了一些t-sql技巧
on  a.id = g.id  AND  a.colid  =  g.smallid  
整理了一些t-sql技巧
order   by   object_name (a.id),a.colorder
整理了一些t-sql技巧
整理了一些t-sql技巧

六、 时间格式转换问题
因为新开发的软件需要用一些旧软件生成的一些数据,在时间格式上不统一,只能手工转换,研究了一下午写了三条语句,以前没怎么用过convert函数和case语句,还有"+"操作符在不同上下文环境也会起到不同的作用,把我搞晕了要,不过现在看来是差不多弄好了。

1、把所有"70.07.06"这样的值变成"1970-07-06"

整理了一些t-sql技巧UPDATE  lvshi
整理了一些t-sql技巧
SET  shengri  =   ' 19 '   +   REPLACE (shengri,  ' . ' ' - ' )
整理了一些t-sql技巧
WHERE  (zhiyezheng  =   ' 139770070153 ' )

 

2、在"1970-07-06"里提取"70","07","06"

整理了一些t-sql技巧SELECT   SUBSTRING (shengri,  3 2 AS   year SUBSTRING (shengri,  6 2 AS   month
整理了一些t-sql技巧      
SUBSTRING (shengri,  9 2 AS   day
整理了一些t-sql技巧
FROM  lvshi
整理了一些t-sql技巧
WHERE  (zhiyezheng  =   ' 139770070153 ' )
整理了一些t-sql技巧

3、把一个时间类型字段转换成"1970-07-06"

整理了一些t-sql技巧UPDATE  lvshi
整理了一些t-sql技巧
SET  shenling  =   CONVERT ( varchar ( 4 ),  YEAR (shenling)) 
整理了一些t-sql技巧      
+   ' - '   +   CASE   WHEN   LEN ( MONTH (shenling))  =   1   THEN   ' 0 '   +   CONVERT ( varchar ( 2 ), 
整理了一些t-sql技巧      
month (shenling))  ELSE   CONVERT ( varchar ( 2 ),  month (shenling)) 
整理了一些t-sql技巧      
END   +   ' - '   +   CASE   WHEN   LEN ( day (shenling))  =   1   THEN   ' 0 '   +   CONVERT ( char ( 2 ), 
整理了一些t-sql技巧      
day (shenling))  ELSE   CONVERT ( varchar ( 2 ),  day (shenling))  END
整理了一些t-sql技巧
WHERE  (zhiyezheng  =   ' 139770070153 ' )
整理了一些t-sql技巧

七、 分区视图
分区视图是提高查询性能的一个很好的办法

整理了一些t-sql技巧-- 看下面的示例
整理了一些t-sql技巧

整理了一些t-sql技巧
-- 示例表
整理了一些t-sql技巧
create   table  tempdb.dbo.t_10(
整理了一些t-sql技巧id 
int   primary   key   check (id  between   1   and   10 ),name  varchar ( 10 ))
整理了一些t-sql技巧
整理了一些t-sql技巧
create   table  pubs.dbo.t_20(
整理了一些t-sql技巧id 
int   primary   key   check (id  between   11   and   20 ),name  varchar ( 10 ))
整理了一些t-sql技巧
整理了一些t-sql技巧
create   table  northwind.dbo.t_30(
整理了一些t-sql技巧id 
int   primary   key   check (id  between   21   and   30 ),name  varchar ( 10 ))
整理了一些t-sql技巧
go
整理了一些t-sql技巧
整理了一些t-sql技巧
-- 分区视图
整理了一些t-sql技巧
create   view  v_t
整理了一些t-sql技巧
as
整理了一些t-sql技巧
select   *   from  tempdb.dbo.t_10
整理了一些t-sql技巧
union   all
整理了一些t-sql技巧
select   *   from  pubs.dbo.t_20
整理了一些t-sql技巧
union   all
整理了一些t-sql技巧
select   *   from  northwind.dbo.t_30
整理了一些t-sql技巧
go
整理了一些t-sql技巧
整理了一些t-sql技巧
-- 插入数据
整理了一些t-sql技巧
insert  v_t  select   1  , ' aa '
整理了一些t-sql技巧
union    all   select   2  , ' bb '
整理了一些t-sql技巧
union    all   select   11 , ' cc '
整理了一些t-sql技巧
union    all   select   12 , ' dd '
整理了一些t-sql技巧
union    all   select   21 , ' ee '
整理了一些t-sql技巧
union    all   select   22 , ' ff '
整理了一些t-sql技巧
整理了一些t-sql技巧
-- 更新数据
整理了一些t-sql技巧
update  v_t  set  name = name + ' _更新 '   where   right (id, 1 ) = 1
整理了一些t-sql技巧
整理了一些t-sql技巧
-- 删除测试
整理了一些t-sql技巧
delete   from  v_t  where   right (id, 1 ) = 2
整理了一些t-sql技巧
整理了一些t-sql技巧
-- 显示结果
整理了一些t-sql技巧
select   *   from  v_t
整理了一些t-sql技巧
go
整理了一些t-sql技巧
整理了一些t-sql技巧
-- 删除测试
整理了一些t-sql技巧
drop   table  northwind.dbo.t_30,pubs.dbo.t_20,tempdb.dbo.t_10
整理了一些t-sql技巧
drop   view  v_t
整理了一些t-sql技巧
整理了一些t-sql技巧整理了一些t-sql技巧
/*--测试结果
整理了一些t-sql技巧
整理了一些t-sql技巧id          name       
整理了一些t-sql技巧----------- ---------- 
整理了一些t-sql技巧1           aa_更新
整理了一些t-sql技巧11          cc_更新
整理了一些t-sql技巧21          ee_更新
整理了一些t-sql技巧
整理了一些t-sql技巧(所影响的行数为 3 行)
整理了一些t-sql技巧==
*/

整理了一些t-sql技巧
整理了一些t-sql技巧


八、 树型的实现
整理了一些t-sql技巧

整理了一些t-sql技巧--参考
整理了一些t-sql技巧

整理了一些t-sql技巧
--树形数据查询示例
整理了一些t-sql技巧--
作者: 邹建
整理了一些t-sql技巧

整理了一些t-sql技巧
--示例数据
整理了一些t-sql技巧
create table [tb]([id] int identity(1,1),[pid] int,name varchar(20))
整理了一些t-sql技巧
insert [tb] select 0,'中国'
整理了一些t-sql技巧
union  all  select 0,'美国'
整理了一些t-sql技巧
union  all  select 0,'加拿大'
整理了一些t-sql技巧
union  all  select 1,'北京'
整理了一些t-sql技巧
union  all  select 1,'上海'
整理了一些t-sql技巧
union  all  select 1,'江苏'
整理了一些t-sql技巧
union  all  select 6,'苏州'
整理了一些t-sql技巧
union  all  select 7,'常熟'
整理了一些t-sql技巧
union  all  select 6,'南京'
整理了一些t-sql技巧
union  all  select 6,'无锡'
整理了一些t-sql技巧
union  all  select 2,'纽约'
整理了一些t-sql技巧
union  all  select 2,'旧金山'
整理了一些t-sql技巧
go
整理了一些t-sql技巧
整理了一些t-sql技巧
--查询指定id的所有子
整理了一些t-sql技巧
create function f_cid(
整理了一些t-sql技巧
@id int
整理了一些t-sql技巧)
returns @re table([id] int,[level] int)
整理了一些t-sql技巧
as
整理了一些t-sql技巧
begin
整理了一些t-sql技巧 
declare @l int
整理了一些t-sql技巧 
set @l=0
整理了一些t-sql技巧 
insert @re select @id,@l
整理了一些t-sql技巧 
while @@rowcount>0
整理了一些t-sql技巧 
begin
整理了一些t-sql技巧  
set @l=@l+1
整理了一些t-sql技巧  
insert @re select a.[id],@l
整理了一些t-sql技巧  
from [tb] a,@re b
整理了一些t-sql技巧  
where a.[pid]=b.[id] and b.[level]=@l-1
整理了一些t-sql技巧 
end
整理了一些t-sql技巧整理了一些t-sql技巧
/**//*--如果只显示最明细的子(下面没有子),则加上这个删除
整理了一些t-sql技巧 delete a from @re a
整理了一些t-sql技巧 where exists(
整理了一些t-sql技巧  select 1 from [tb] where [pid]=a.[id])
整理了一些t-sql技巧--
*/

整理了一些t-sql技巧 
return
整理了一些t-sql技巧
end
整理了一些t-sql技巧
go
整理了一些t-sql技巧
整理了一些t-sql技巧
--调用(查询所有的子)
整理了一些t-sql技巧
select a.*,层次=b.[level] from [tb] a,f_cid(2)b where a.[id]=b.[id]
整理了一些t-sql技巧
go
整理了一些t-sql技巧
整理了一些t-sql技巧
--删除测试
整理了一些t-sql技巧
drop table [tb]
整理了一些t-sql技巧
drop function f_cid
整理了一些t-sql技巧
go
整理了一些t-sql技巧
整理了一些t-sql技巧

 

九、 排序问题

整理了一些t-sql技巧CREATE TABLE [t] (
整理了一些t-sql技巧 
[id] [int] IDENTITY (11NOT NULL ,
整理了一些t-sql技巧 
[GUID] [uniqueidentifier] NULL 
整理了一些t-sql技巧
ON [PRIMARY]
整理了一些t-sql技巧
GO


下面这句执行5次

整理了一些t-sql技巧insert t values (newid())


查看执行结果

整理了一些t-sql技巧select * from t


1、 第一种

整理了一些t-sql技巧select * from t
整理了一些t-sql技巧 
order by case id when 4 then 1
整理了一些t-sql技巧                  
when 5 then 2
整理了一些t-sql技巧                  
when 1 then 3
整理了一些t-sql技巧                  
when 2 then 4
整理了一些t-sql技巧                  
when 3 then 5 end


2、 第二种

整理了一些t-sql技巧select * from t order by (id+2)%6


3、 第三种

整理了一些t-sql技巧select * from t order by charindex(cast(id as varchar),'45123')


4、 第四种

整理了一些t-sql技巧select * from t
整理了一些t-sql技巧
WHERE id between 0 and 5
整理了一些t-sql技巧
order by charindex(cast(id as varchar),'45123')


5、 第五种

整理了一些t-sql技巧select * from t order by case when id >3 then id-5 else id end


6、 第六种

整理了一些t-sql技巧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构建成的值,然后用下面的一句就全部删
除了,比循环用多条语句高效吧应该。

整理了一些t-sql技巧delete from [fujian] where charindex(','+cast([id] as varchar)+',',','+'5,6,8,9,10,11,'+',')>0


还有一种就是

整理了一些t-sql技巧delete from table1 where id in(1,2,3,4 整理了一些t-sql技巧)


十一、获取子表内的一列数据的组合字符串
下面这个函数获取05年已经注册了的某个所的律师,唯一一个参数就是事务所的名称,然后返回zhuce字段里包含05字样的所有律师。

整理了一些t-sql技巧CREATE   FUNCTION fn_Get05LvshiNameBySuo  (@p_suo Nvarchar(50))
整理了一些t-sql技巧
RETURNS Nvarchar(2000)
整理了一些t-sql技巧
AS
整理了一些t-sql技巧
BEGIN  
整理了一些t-sql技巧 
DECLARE @LvshiNames varchar(2000), @name varchar(50)
整理了一些t-sql技巧 
select @LvshiNames=''
整理了一些t-sql技巧 
DECLARE lvshi_cursor CURSOR FOR

 


数据库里有1,2,3,4,5 共5条记录,要用一条sql语句让其排序,使它排列成4,5,1,2,3,怎么写?