sql 多个字段相减语句本小说找出了一大波来自网络的有关sql
多个字段相减语句与函数代码,比方表达了七个字段相减做法。

   本文的源地址:  
    [1]

mssql 如何升高数据库教程关联合检查询质量

sql 四个字段相减语句本随笔寻觅了大气源于网络的关于sql
多少个字段相减语句与函数代码,比方表明了多个字段相减做法。

**    [2]

— 测量检验数据:[a1]if object_id(‘[a1]’) is not null drop table
[a1]create table [a1]([id] int,[sortid1] int,[sortid2]
int,[info] varchar(5))insert [a1]select 1,1,3,’info’ union allselect
2,2,4,’info2′

select a.字段1,字段2=a.字段2-isnull((select 字段2 from 表2 where
a.字段1=字段1),0) from 表1 a

    [3

— 测验数据:[b2]if object_id(‘[b2]’) is not null drop table
[b2]create table [b2]([sortid] int,[name] varchar(5))insert
[b2]select 1,’分类1′ union allselect 2,’分类2′ union allselect
3,’分类3′ union allselect 4,’分类4′

方法二

**

select * from [a1]select * from [b2]

create table 表1( 字段1 varchar(50), 字段2 int)insert into 表1select
‘111001’ , 10 union allselect ‘111002’ , 9 union allselect ‘111003’ ,
12 union allselect ‘111004’ , 23

create table 表2( 字段1 varchar(50), 字段2 int)insert into 表2select
‘111001’ , 3 union allselect ‘111002’ , 2 union allselect ‘111003’ ,
12

select a.字段1, (a.[字段2] – (isnull(b.[字段2],0)) ) as 字段2 from
表1 a left join 表2 bon a.[字段1] = b.[字段1]

结果: 字段1 字段2 111001 7 111002 7 111003 0 111004 23

    1 只复制几个表布局,不复制数据

select a1.id,sortid1,b2.name,a1.sortid2,b.name,a1.[info]from
dbo.a1left join b2 on a1.sortid1 = b2.sortidleft join b2 b on a1.sortid2
= b.sortid

方法三

    select top 0 * into [t1] from [t2]

/*id sortid1 name sortid2 name info———– ———– —–
———– —– —–1 1 分类1 3 分类3 info2 2 分类2 4 分类4 info2

有多个相符的表t1和t2,都有字段a(字符卡塔尔国,b(数值State of Qatar,c(数值卡塔尔,内容如下:t1 t2a b c
a b ca1 10 20 a2 2 10a2 10 20 a3 3 15a3 10 20a4 10 20

    2 获得数据库中有些对象的成立脚本

(2 行受影响卡塔尔国*/

select t1.a as a,(t1.b – isnull(t2.b,0)) as b,(t1.c – isnull(t2.c,0))
as c from [t1] left join [t2] on (t1.a = t2.a)

    (1卡塔尔(قطر‎ 先用上面包车型客车脚本创造三个函数

村生泊长方法

威澳门尼斯人36366com 1if exists(select 1 from sysobjects where id=object_id(‘fgetscript’) and objectproperty(id,’IsInlineFunction’)=0)
威澳门尼斯人36366com 2  drop function fgetscript
威澳门尼斯人36366com 3go
威澳门尼斯人36366com 4
威澳门尼斯人36366com 5create function fgetscript(
威澳门尼斯人36366com 6@servername varchar(50卡塔尔     –服务器名
威澳门尼斯人36366com 7 ,@userid varchar(50卡塔尔(قطر‎=’sa’    –客商名,就算为nt验证方式,则为空
威澳门尼斯人36366com 8 ,@password varchar(50)=”    –密码
威澳门尼斯人36366com 9 ,@databasename varchar(50卡塔尔(قطر‎    –数据库名称
威澳门尼斯人36366com 10 ,@objectname varchar(250)    –对象名
威澳门尼斯人36366com 11) returns varchar(8000)
威澳门尼斯人36366com 12as
威澳门尼斯人36366com 13begin
威澳门尼斯人36366com 14 declare @re varchar(8000卡塔尔国        –重回脚本
威澳门尼斯人36366com 15 declare @srvid int,@dbsid int       –定义服务器、数据库集id
威澳门尼斯人36366com 16 declare @dbid int,@tbid int        –数据库、表id
威澳门尼斯人36366com 17 declare @err int,@src varchar(255State of Qatar, @desc varchar(255卡塔尔国 –错误管理变量
威澳门尼斯人36366com 18
威澳门尼斯人36366com 19–创建sqldmo对象
威澳门尼斯人36366com 20 exec @err=sp_oacreate ‘sqldmo.sqlserver’,@srvid output
威澳门尼斯人36366com 21 if @err<>0 goto lberr
威澳门尼斯人36366com 22
威澳门尼斯人36366com 23–连接服务器
威澳门尼斯人36366com 24 if isnull(@userid,”卡塔尔国=” –如若是 Nt验证格局
威澳门尼斯人36366com 25 begin
威澳门尼斯人36366com 26  exec @err=sp_oasetproperty @srvid,’loginsecure’,1
威澳门尼斯人36366com 27  if @err<>0 goto lberr
威澳门尼斯人36366com 28
威澳门尼斯人36366com 29  exec @err=sp_oamethod @srvid,’connect’,null,@servername
威澳门尼斯人36366com 30 end
威澳门尼斯人36366com 31 else
威澳门尼斯人36366com 32  exec @err=sp_oamethod @srvid,’connect’,null,@servername,@userid,@password
威澳门尼斯人36366com 33
威澳门尼斯人36366com 34 if @err<>0 goto lberr
威澳门尼斯人36366com 35
威澳门尼斯人36366com 36–获得数据库集
威澳门尼斯人36366com 37 exec @err=sp_oagetproperty @srvid,’databases’,@dbsid output
威澳门尼斯人36366com 38 if @err<>0 goto lberr
威澳门尼斯人36366com 39
威澳门尼斯人36366com 40–得到要收获脚本的数据库id
威澳门尼斯人36366com 41 exec @err=sp_oamethod @dbsid,’item’,@dbid output,@databasename
威澳门尼斯人36366com 42 if @err<>0 goto lberr
威澳门尼斯人36366com 43
威澳门尼斯人36366com 44–得到要得到脚本的目的id
威澳门尼斯人36366com 45 exec @err=sp_oamethod @dbid,’getobjectbyname’,@tbid output,@objectname
威澳门尼斯人36366com 46 if @err<>0 goto lberr
威澳门尼斯人36366com 47
威澳门尼斯人36366com 48–得到脚本
威澳门尼斯人36366com 49 exec @err=sp_oamethod @tbid,’script’,@re output
威澳门尼斯人36366com 50 if @err<>0 goto lberr
威澳门尼斯人36366com 51
威澳门尼斯人36366com 52 –print @re
威澳门尼斯人36366com 53 return(@re)
威澳门尼斯人36366com 54
威澳门尼斯人36366com 55lberr:
威澳门尼斯人36366com 56 exec sp_oageterrorinfo NULL, @src out, @desc out 
威澳门尼斯人36366com 57 declare @errb varbinary(4)
威澳门尼斯人36366com 58 set @errb=cast(@err as varbinary(4))
威澳门尼斯人36366com 59 exec master..xp_varbintohexstr @errb,@re out
威澳门尼斯人36366com 60 set @re=’错误号: ‘+@re
威澳门尼斯人36366com 61   +char(13)+’错误源: ‘+@src
威澳门尼斯人36366com 62   +char(13卡塔尔+’错误描述: ‘+@desc
威澳门尼斯人36366com 63 return(@re)
威澳门尼斯人36366com 64end
威澳门尼斯人36366com 65go
威澳门尼斯人36366com 66

select id,rortid1,b.name as name1 , sortid2,c.name as name2,info from a
left join b on a.rortid1=b.rortidleft join b c on a.rortid2=b.rortid

    (2State of Qatar用法如下:

正如实用的法子

威澳门尼斯人36366com 67print dbo.fgetscript(‘服务器名’,’客户名’,’密码’,’数据库名’,’表名或任何对象名’卡塔尔

视图能够简化操作,无法升高质量。能够尝尝创建索引视图

    (3卡塔尔国假如要博得库里全数目的的脚本,如如下方式

威澳门尼斯人36366com 68declare @name varchar(250)
威澳门尼斯人36366com 69declare #aa cursor for
威澳门尼斯人36366com 70select name from sysobjects where xtype not in(‘S’,’PK’,’D’,’X’,’L’)
威澳门尼斯人36366com 71open #aa
威澳门尼斯人36366com 72fetch next from #aa into @name
威澳门尼斯人36366com 73while @@fetch_status=0
威澳门尼斯人36366com 74begin
威澳门尼斯人36366com 75 print dbo.fgetscript(‘onlytiancai’,’sa’,’sa’,’database’,@name)
威澳门尼斯人36366com 76 fetch next from #aa into @name
威澳门尼斯人36366com 77end
威澳门尼斯人36366com 78close #aa
威澳门尼斯人36366com 79deallocate #aa
威澳门尼斯人36366com 80

 **   3 分隔字符串

   **
假设有贰个用逗号分割开的字符串,举个例子说”a,b,c,d,1,2,3,4″,怎么样用t-sql获取那一个字符串有多少个成分,获取第多少个成分的值是稍稍吧?因为t-sql里未有split函数,也向来不数组的概念,所以只可以和睦写多少个函数了。

    (1卡塔尔(قطر‎ 获取成分个数的函数

 

威澳门尼斯人36366com 81create function getstrarrlength (@str varchar(8000))
威澳门尼斯人36366com 82returns int
威澳门尼斯人36366com 83as
威澳门尼斯人36366com 84begin
威澳门尼斯人36366com 85  declare @int_return int
威澳门尼斯人36366com 86  declare @start int
威澳门尼斯人36366com 87  declare @next int
威澳门尼斯人36366com 88  declare @location int
威澳门尼斯人36366com 89  select @str =’,’+ @str +’,’
威澳门尼斯人36366com 90  select @str=replace(@str,’,,’,’,’)
威澳门尼斯人36366com 91  select @start =1
威澳门尼斯人36366com 92  select @next =1 
威澳门尼斯人36366com 93  select @location = charindex(‘,’,@str,@start)
威澳门尼斯人36366com 94  while (@location <>0)
威澳门尼斯人36366com 95  begin
威澳门尼斯人36366com 96    select @start = @location +1
威澳门尼斯人36366com 97    select @location = charindex(‘,’,@str,@start)
威澳门尼斯人36366com 98    select @next =@next +1
威澳门尼斯人36366com 99  end
威澳门尼斯人36366com 100 select @int_return = @next-2
威澳门尼斯人36366com 101 return @int_return
威澳门尼斯人36366com 102end
威澳门尼斯人36366com 103

    (2卡塔尔 获取钦定索引的值的函数

 

威澳门尼斯人36366com 104create function getstrofindex (@str varchar(8000),@index int =0)
威澳门尼斯人36366com 105returns varchar(8000)
威澳门尼斯人36366com 106as
威澳门尼斯人36366com 107begin
威澳门尼斯人36366com 108  declare @str_return varchar(8000)
威澳门尼斯人36366com 109  declare @start int
威澳门尼斯人36366com 110  declare @next int
威澳门尼斯人36366com 111  declare @location int
威澳门尼斯人36366com 112  select @start =1
威澳门尼斯人36366com 113  select @next =1 –假使习贯从0最初则select @next =0
威澳门尼斯人36366com 114  select @location = charindex(‘,’,@str,@start)
威澳门尼斯人36366com 115  while (@location <>0 and @index > @next )
威澳门尼斯人36366com 116  begin
威澳门尼斯人36366com 117    select @start = @location +1
威澳门尼斯人36366com 118    select @location = charindex(‘,’,@str,@start)
威澳门尼斯人36366com 119    select @next =@next +1
威澳门尼斯人36366com 120  end
威澳门尼斯人36366com 121  if @location =0 select @location =len(@str卡塔尔(قطر‎+1 –假诺是因为未有逗号退出,则认为逗号在字符串后
威澳门尼斯人36366com 122  select @str_return = substring(@str,@start,@location -@start卡塔尔国 –@start料定是逗号之后的岗位还是就是伊始值1
威澳门尼斯人36366com 123  if (@index <> @next ) select @str_return = ” –假诺两个不等于,则是因为逗号太少,大概@index小于@next的起头值1。
威澳门尼斯人36366com 124  return @str_return
威澳门尼斯人36366com 125end
威澳门尼斯人36366com 126

    (3卡塔尔(قطر‎ 用法如下:

威澳门尼斯人36366com 127SELECT [dbo].[getstrarrlength](‘1,2,3,4,a,b,c,d’)
威澳门尼斯人36366com 128SELECT [dbo].[getstrofindex](‘1,2,3,4,a,b,c,d’,5)

    4  一条语句施行越过若干个数据库
    本身要在一条语句里操作分歧的服务器上的两样的数据Curry的两样的表,如何是好吧?
    方法一:

威澳门尼斯人36366com 129select * from OPENDATASOURCE(‘SQLOLEDB’,’Data Source=远程ip;User ID=sa;Password=密码’).库名.dbo.表名

    方法二:
    先采用联结服务器:

威澳门尼斯人36366com 130EXEC sp_addlinkedserver ‘别名’,”,’MSDASQL’,NULL,NULL,’DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;’
威澳门尼斯人36366com 131exec sp_addlinkedsrvlogin  @rmtsrvname=’别名’,@useself=’false’,@locallogin=’sa’,@rmtuser=’sa’,@rmtpassword=’密码’
威澳门尼斯人36366com 132GO
威澳门尼斯人36366com 133

    然后:

威澳门尼斯人36366com 134select * from 别名.库名.dbo.表名
威澳门尼斯人36366com 135insert 库名.dbo.表名 select * from 别名.库名.dbo.表名
威澳门尼斯人36366com 136select * into 库名.dbo.新表名 from 别名.库名.dbo.表名
威澳门尼斯人36366com 137go

    5 获取一个表中全体的字段音信

    先创建三个视图

威澳门尼斯人36366com 138Create view fielddesc    
威澳门尼斯人36366com 139as
威澳门尼斯人36366com 140select o.name as table_name,c.name as field_name,t.name as type,c.length as 
威澳门尼斯人36366com 141
威澳门尼斯人36366com 142length,c.isnullable as isnullable,convert(varchar(30),p.value) as desp 
威澳门尼斯人36366com 143from syscolumns c  
威澳门尼斯人36366com 144join systypes t on c.xtype = t.xusertype
威澳门尼斯人36366com 145join sysobjects o on o.id=c.id 
威澳门尼斯人36366com 146left join    sysproperties p on p.smallid=c.colid and p.id=o.id    
威澳门尼斯人36366com 147where o.xtype=’U’

 

    查询时:

威澳门尼斯人36366com 148Select * from fielddesc where table_name = ‘你的表名’ 

 

    还恐怕有个更加强的讲话,是邹建写的,也写出来吧

威澳门尼斯人36366com 149SELECT 
威澳门尼斯人36366com 150 (case when a.colorder=1 then d.name else ” end) N’表名’,
威澳门尼斯人36366com 151 a.colorder N’字段序号’,
威澳门尼斯人36366com 152 a.name N’字段名’,
威澳门尼斯人36366com 153 (case when COLUMNPROPERTY( a.id,a.name,’IsIdentity’)=1 then ‘√’else ” end) N’标识’,
威澳门尼斯人36366com 154 (case when (SELECT count(*)
威澳门尼斯人36366com 155 FROM sysobjects
威澳门尼斯人36366com 156 WHERE (name in
威澳门尼斯人36366com 157           (SELECT name
威澳门尼斯人36366com 158          FROM sysindexes
威澳门尼斯人36366com 159          WHERE (id = a.id) AND (indid in
威澳门尼斯人36366com 160                    (SELECT indid
威澳门尼斯人36366com 161                   FROM sysindexkeys
威澳门尼斯人36366com 162                   WHERE (id = a.id) AND (colid in
威澳门尼斯人36366com 163                             (SELECT colid
威澳门尼斯人36366com 164                            FROM syscolumns
威澳门尼斯人36366com 165                            WHERE (id = a.id) AND (name = a.name))))))) AND
威澳门尼斯人36366com 166        (xtype = ‘PK’))>0 then ‘√’ else ” end) N’主键’,
威澳门尼斯人36366com 167 b.name N’类型’,
威澳门尼斯人36366com 168 a.length N’占用字节数’,
威澳门尼斯人36366com 169 COLUMNPROPERTY(a.id,a.name,’PRECISION’) as N’长度’,
威澳门尼斯人36366com 170 isnull(COLUMNPROPERTY(a.id,a.name,’Scale’卡塔尔国,0卡塔尔国 as N’小数位数’,
威澳门尼斯人36366com 171 (case when a.isnullable=1 then ‘√’else ” end) N’允许空’,
威澳门尼斯人36366com 172 isnull(e.text,”) N’默认值’,
威澳门尼斯人36366com 173 isnull(g.[value],”卡塔尔国 AS N’字段表达’
威澳门尼斯人36366com 174–into ##tx
威澳门尼斯人36366com 175
威澳门尼斯人36366com 176FROM  syscolumns  a left join systypes b 
威澳门尼斯人36366com 177on  a.xtype=b.xusertype
威澳门尼斯人36366com 178inner join sysobjects d 
威澳门尼斯人36366com 179on a.id=d.id  and  d.xtype=’U’ and  d.name<>’dtproperties’
威澳门尼斯人36366com 180left join syscomments e
威澳门尼斯人36366com 181on a.cdefault=e.id
威澳门尼斯人36366com 182left join sysproperties g
威澳门尼斯人36366com 183on a.id=g.id AND a.colid = g.smallid  
威澳门尼斯人36366com 184order by object_name(a.id),a.colorder
威澳门尼斯人36366com 185
威澳门尼斯人36366com 186

    6  时间格式调换难点

   
因为新开垦的软件供给用部分旧软件生成的部分数量,在时刻格式上不统一,只好手工业调换,研究了一中午写了三条语句,早前没怎么用过convert函数和case语句,还恐怕有”+”操作符在不一样上下文情形也会起到区别的意义,把自家搞晕了要,不过未来总之是基本上弄好了。

    (1卡塔尔国 把持有”70.07.06″那样的值形成”一九六九-07-06″

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注