仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 585|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之MS-SQL数据库开辟经常使用汇总和t-sql技能集...

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:24:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
这类操作的执行过程是,1)按照新的表定义建立一个临时表tmpa,2)将原表数据拷贝到临时表,3)将原始表改名tmpb,4)将tmpa改名为原表名,5)将tmpb删除。技能|数据|数据库把永日期转换为短日期Convert(char(10),getdate(),120)
MS-SQL数据库开辟经常使用汇总1.按姓氏笔划排序:


Select*FromTableNameOrderByCustomerNameCollateChinese_PRC_Stroke_ci_as
2.数据库加密:
selectencrypt(原始暗码)
selectpwdencrypt(原始暗码)
selectpwdcompare(原始暗码,加密后暗码)=1--不异;不然不不异encrypt(原始暗码)
selectpwdencrypt(原始暗码)
selectpwdcompare(原始暗码,加密后暗码)=1--不异;不然不不异

3.取回表中字段:

declare@listvarchar(1000),@sqlnvarchar(1000)
select@list=@list+,+b.namefromsysobjectsa,syscolumnsbwherea.id=b.idanda.name=表A
set@sql=select+right(@list,len(@list)-1)+from表A
exec(@sql)

4.检察硬盘分区:
EXECmaster..xp_fixeddrives

5.对照A,B表是不是相称:

if(selectchecksum_agg(binary_checksum(*))fromA)
=
(selectchecksum_agg(binary_checksum(*))fromB)
print相称
else
print不相称
6.杀失落一切的事务探察器历程:

DECLAREhcforeachCURSORGLOBALFORSELECTkill+RTRIM(spid)FROMmaster.dbo.sysprocesses
WHEREprogram_nameIN(SQLprofiler,NSQL事务探查器)
EXECsp_msforeach_worker?
7.纪录搜刮:
开首到N笔记录

SelectTopN*From表
-------------------------------
N到M笔记录(要有主索引ID)
SelectTopM-N*From表WhereIDin(SelectTopMIDFrom表)OrderbyIDDesc
----------------------------------
N到开头纪录
SelectTopN*From表OrderbyIDDesc
8.怎样修正数据库的称号:

sp_renamedbold_name,new_name
9:猎取以后数据库中的一切用户表

selectNamefromsysobjectswherextype=uandstatus>=0
10:猎取某一个表的一切字段

selectnamefromsyscolumnswhereid=object_id(表名)
11:检察与某一个表相干的视图、存储历程、函数

selecta.*fromsysobjectsa,syscommentsbwherea.id=b.idandb.textlike%表名%
12:检察以后数据库中一切存储历程

selectnameas存储历程称号fromsysobjectswherextype=P
13:查询用户创立的一切数据库

select*frommaster..sysdatabasesDwheresidnotin(selectsidfrommaster..sysloginswherename=sa)
大概

selectdbid,nameASDB_NAMEfrommaster..sysdatabaseswheresid<>0x01
14:查询某一个表的字段和数据范例

selectcolumn_name,data_typefrominformation_schema.columns
wheretable_name=表名
[n].[题目]:
Select*FromTableNameOrderByCustomerName
[n].[题目]:


1、只复制一个表布局,不复制数据
selecttop0*into[t1]from[t2]

2、猎取数据库中某个工具的创立剧本
1、先用上面的剧本创立一个函数

ifexists(select1fromsysobjectswhereid=object_id(fgetscript)andobjectproperty(id,IsInlineFunction)=0)
dropfunctionfgetscript
go
createfunctionfgetscript(
@servernamevarchar(50)--服务器名
,@useridvarchar(50)=sa--用户名,假如为nt考证体例,则为空
,@passwordvarchar(50)=--暗码
,@databasenamevarchar(50)--数据库称号
,@objectnamevarchar(250)--工具名
)returnsvarchar(8000)
as
begin
declare@revarchar(8000)--前往剧本
declare@srvidint,@dbsidint--界说服务器、数据库集id
declare@dbidint,@tbidint--数据库、表id
declare@errint,@srcvarchar(255),@descvarchar(255)--毛病处置变量
--创立sqldmo工具
exec@err=sp_oacreatesqldmo.sqlserver,@srvidoutput
if@err0gotolberr
--毗连服务器
ifisnull(@userid,)=--假如是Nt考证体例
begin
exec@err=sp_oasetproperty@srvid,loginsecure,1
if@err0gotolberr
exec@err=sp_oamethod@srvid,connect,null,@servername
end
else
exec@err=sp_oamethod@srvid,connect,null,@servername,@userid,@password
if@err0gotolberr
--猎取数据库集
exec@err=sp_oagetproperty@srvid,databases,@dbsidoutput
if@err0gotolberr
--猎取要获得剧本的数据库id
exec@err=sp_oamethod@dbsid,item,@dbidoutput,@databasename
if@err0gotolberr
--猎取要获得剧本的工具id
exec@err=sp_oamethod@dbid,getobjectbyname,@tbidoutput,@objectname
if@err0gotolberr
--获得剧本
exec@err=sp_oamethod@tbid,script,@reoutput
if@err0gotolberr
--print@re
return(@re)
lberr:
execsp_oageterrorinfoNULL,@srcout,@descout
declare@errbvarbinary(4)
set@errb=cast(@errasvarbinary(4))
execmaster..xp_varbintohexstr@errb,@reout
set@re=毛病号:+@re
+char(13)+毛病源:+@src
+char(13)+毛病形貌:+@desc
return(@re)
end
go
2、用法以下
用法以下,
printdbo.fgetscript(服务器名,用户名,暗码,数据库名,表名或别的工具名)

3、假如要猎取库里一切工具的剧本,如以下体例
declare@namevarchar(250)
declare#aacursorfor
selectnamefromsysobjectswherextypenotin(S,PK,D,X,L)
open#aa
fetchnextfrom#aainto@name
while@@fetch_status=0
begin
printdbo.fgetscript(onlytiancai,sa,sa,database,@name)
fetchnextfrom#aainto@name
end
close#aa
deallocate#aa
4、声明,此函数是csdn邹建邹老迈供应的
3、分开字符串
假如有一个用逗号支解开的字符串,好比说"a,b,c,d,1,2,3,4",怎样用t-sql猎取这个字符串有几个元素,猎取第几个元素的值是几呢?由于t-sql里没有split函数,也没无数组的观点,以是只能本人写几个函数了。
1、猎取元素个数的函数

createfunctiongetstrarrlength(@strvarchar(8000))
returnsint
as
begin
declare@int_returnint
declare@startint
declare@nextint
declare@locationint
select@str=,+@str+,
select@str=replace(@str,,,,,)
select@start=1
select@next=1
select@location=charindex(,,@str,@start)
while(@location0)
begin
select@start=@location+1
select@location=charindex(,,@str,@start)
select@next=@next+1
end
select@int_return=@next-2
return@int_return
end

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

createfunctiongetstrofindex(@strvarchar(8000),@indexint=0)
returnsvarchar(8000)
as
begin
declare@str_returnvarchar(8000)
declare@startint
declare@nextint
declare@locationint
select@start=1
select@next=1--假如习气从0入手下手则select@next=0
select@location=charindex(,,@str,@start)
while(@location0and@index>@next)
begin
select@start=@location+1
select@location=charindex(,,@str,@start)
select@next=@next+1
end
if@location=0select@location=len(@str)+1--假如是由于没有逗号加入,则以为逗号在字符串后
select@str_return=substring(@str,@start,@location-@start)--@start一定是逗号以后的地位大概就是初始值1
if(@index@next)select@str_return=--假如两者不相称,则是由于逗号太少,大概@index小于@next的初始值1。
return@str_return
end

3、测试


SELECT[dbo].[getstrarrlength](1,2,3,4,a,b,c,d)
SELECT[dbo].[getstrofindex](1,2,3,4,a,b,c,d,5)

4、一条语句实行超过多少个数据库
我要在一条语句里操纵分歧的服务器上的分歧的数据库里的分歧的表,怎样办呢?
第一种办法:


select*fromOPENDATASOURCE(SQLOLEDB,DataSource=远程ip;UserID=sa;Password=暗码).库名.dbo.表名

第二种办法:
先利用联合服务器:


EXECsp_addlinkedserver别号,,MSDASQL,NULL,NULL,DRIVER={SQLServer};SERVER=远程名;UID=用户;PWD=暗码;
execsp_addlinkedsrvlogin@rmtsrvname=别号,@useself=false,@locallogin=sa,@rmtuser=sa,@rmtpassword=暗码
GO

然后你就能够以下:


select*from别号.库名.dbo.表名
insert库名.dbo.表名select*from别号.库名.dbo.表名
select*into库名.dbo.新表名from别号.库名.dbo.表名
go

5、如何猎取一个表中一切的字段信息
蛙蛙保举:如何猎取一个表中一切字段的信息
先创立一个视图


Createviewfielddesc
as
selecto.nameastable_name,c.nameasfield_name,t.nameastype,c.lengthas
length,c.isnullableasisnullable,convert(varchar(30),p.value)asdesp
fromsyscolumnsc
joinsystypestonc.xtype=t.xusertype
joinsysobjectsoono.id=c.id
leftjoinsyspropertiesponp.smallid=c.colidandp.id=o.id
whereo.xtype=U

查询时:


Select*fromfielddescwheretable_name=你的表名
另有个更强的语句,是邹建写的,也写出来吧
SELECT
(casewhena.colorder=1thend.nameelseend)N表名,
a.colorderN字段序号,
a.nameN字段名,
(casewhenCOLUMNPROPERTY(a.id,a.name,IsIdentity)=1then√elseend)N标识,
(casewhen(SELECTcount(*)
FROMsysobjects
WHERE(namein
(SELECTname
FROMsysindexes
WHERE(id=a.id)AND(indidin
(SELECTindid
FROMsysindexkeys
WHERE(id=a.id)AND(colidin
(SELECTcolid
FROMsyscolumns
WHERE(id=a.id)AND(name=a.name)))))))AND
(xtype=PK))>0then√elseend)N主键,
b.nameN范例,
a.lengthN占用字节数,
COLUMNPROPERTY(a.id,a.name,PRECISION)asN长度,
isnull(COLUMNPROPERTY(a.id,a.name,Scale),0)asN小数位数,
(casewhena.isnullable=1then√elseend)N同意空,
isnull(e.text,)N默许值,
isnull(g.[value],)ASN字段申明
--into##tx
FROMsyscolumnsaleftjoinsystypesb
ona.xtype=b.xusertype
innerjoinsysobjectsd
ona.id=d.idandd.xtype=Uandd.namedtproperties
leftjoinsyscommentse
ona.cdefault=e.id
leftjoinsyspropertiesg
ona.id=g.idANDa.colid=g.smallid
orderbyobject_name(a.id),a.colorder

6、工夫格局转换成绩
由于新开辟的软件必要用一些旧软件天生的一些数据,在工夫格局上不一致,只妙手工转换,研讨了一下战书写了三条语句,之前没怎样用过convert函数和case语句,另有"+"操纵符在分歧高低文情况也会起到分歧的感化,把我弄晕了要,不外如今看来是差未几弄好了。
1、把一切"70.07.06"如许的值酿成"1970-07-06"


UPDATElvshi
SETshengri=19+REPLACE(shengri,.,-)
WHERE(zhiyezheng=139770070153)
2、在"1970-07-06"里提取"70","07","06"


SELECTSUBSTRING(shengri,3,2)ASyear,SUBSTRING(shengri,6,2)ASmonth,
SUBSTRING(shengri,9,2)ASday
FROMlvshi
WHERE(zhiyezheng=139770070153)

3、把一个工夫范例字段转换成"1970-07-06"


UPDATElvshi
SETshenling=CONVERT(varchar(4),YEAR(shenling))
+-+CASEWHENLEN(MONTH(shenling))=1THEN0+CONVERT(varchar(2),
month(shenling))ELSECONVERT(varchar(2),month(shenling))
END+-+CASEWHENLEN(day(shenling))=1THEN0+CONVERT(char(2),
day(shenling))ELSECONVERT(varchar(2),day(shenling))END
WHERE(zhiyezheng=139770070153)

7、分区视图
分区视图是进步查询功能的一个很好的举措
--看上面的示例
--示例表
createtabletempdb.dbo.t_10(
idintprimarykeycheck(idbetween1and10),namevarchar(10))
createtablepubs.dbo.t_20(
idintprimarykeycheck(idbetween11and20),namevarchar(10))
createtablenorthwind.dbo.t_30(
idintprimarykeycheck(idbetween21and30),namevarchar(10))
go
--分区视图
createviewv_t
as
select*fromtempdb.dbo.t_10
unionall
select*frompubs.dbo.t_20
unionall
select*fromnorthwind.dbo.t_30
go
--拔出数据
insertv_tselect1,aa
unionallselect2,bb
unionallselect11,cc
unionallselect12,dd
unionallselect21,ee
unionallselect22,ff
--更新数据
updatev_tsetname=name+_更新whereright(id,1)=1
--删除测试
deletefromv_twhereright(id,1)=2
--显现了局
select*fromv_t
go
--删除测试
droptablenorthwind.dbo.t_30,pubs.dbo.t_20,tempdb.dbo.t_10
dropviewv_t
/**//**//**//*--测试了局
idname
---------------------
1aa_更新
11cc_更新
21ee_更新
(所影响的行数为3行)
==*/

8、树型的完成

--参考
--树形数据查询示例
--作者:邹建
--示例数据

createtable[tb]([id]intidentity(1,1),[pid]int,namevarchar(20))
insert[tb]select0,中国
unionallselect0,美国
unionallselect0,加拿年夜
unionallselect1,北京
unionallselect1,上海
unionallselect1,江苏
unionallselect6,姑苏
unionallselect7,常熟
unionallselect6,南京
unionallselect6,无锡
unionallselect2,纽约
unionallselect2,旧金山
go
--查询指定id的一切子
createfunctionf_cid(
@idint
)returns@retable([id]int,[level]int)
as
begin
declare@lint
set@l=0
insert@reselect@id,@l
while@@rowcount>0
begin
set@l=@l+1
insert@reselecta.[id],@l
from[tb]a,@reb
wherea.[pid]=b.[id]andb.[level]=@l-1
end
/**//**//**//**//**//**//**//*--假如只显现最明细的子(上面没有子),则加上这个删除
deleteafrom@rea
whereexists(
select1from[tb]where[pid]=a.[id])
--*/
return
end
go
--挪用(查询一切的子)
selecta.*,条理=b.[level]from[tb]a,f_cid(2)bwherea.[id]=b.[id]
go
--删除测试
droptable[tb]
dropfunctionf_cid
go
9、排序成绩
CREATETABLE[t](
[id][int]IDENTITY(1,1)NOTNULL,
[GUID][uniqueidentifier]NULL
)ON[PRIMARY]
GO

上面这句实行5次
inserttvalues(newid())

检察实行了局

select*fromt

1、第一种

select*fromt
orderbycaseidwhen4then1
when5then2
when1then3
when2then4
when3then5end

2、第二种

select*fromtorderby(id+2)%6

3、第三种

select*fromtorderbycharindex(cast(idasvarchar),45123)

4、第四种

select*fromt
WHEREidbetween0and5
orderbycharindex(cast(idasvarchar),45123)

5、第五种

select*fromtorderbycasewhenid>3thenid-5elseidend

6、第六种

select*fromtorderbyid/4desc,idasc
10、一条语句删除一批纪录
起首id列是int标识类范例,然后删除ID值为5,6,8,9,10,11的列,这里的cast函数不克不及用convert函数取代,并且转换的范例必需是varchar,而不克不及是char,不然就会实行出你不但愿的了局,这里的"5,6,8,9,10,11"能够是你在页面上猎取的一个chkboxlist构建成的值,然后用上面的一句就全体删
除,比轮回用多条语句高效吧应当。

deletefrom[fujian]wherecharindex(,+cast([id]asvarchar)+,,,+5,6,8,9,10,11,+,)>0

另有一种就是

deletefromtable1whereidin(1,2,3,4)

11、猎取子表内的一列数据的组合字符串
上面这个函数猎取05年已注册了的某个所的状师,独一一个参数就是事件所的称号,然后前往zhuce字段里包括05字样的一切状师。

CREATEFUNCTIONfn_Get05LvshiNameBySuo(@p_suoNvarchar(50))
RETURNSNvarchar(2000)
AS
BEGIN
DECLARE@LvshiNamesvarchar(2000),@namevarchar(50)
select@LvshiNames=
DECLARElvshi_cursorCURSORFOR

数据库里有1,2,3,4,5共5笔记录,要用一条sql语句让其排序,使它分列成4,5,1,2,3,怎样写?
  --数据操纵
  SELECT--从数据库表中检索数据行和列
      INSERT--向数据库表增加新数据行
      DELETE--从数据库表中删除数据行
      UPDATE--更新数据库表中的数据
  --数据界说
  CREATETABLE--创立一个数据库表
      DROPTABLE--从数据库中删除表
      ALTERTABLE--修正数据库表布局
      CREATEVIEW--创立一个视图
      DROPVIEW--从数据库中删除视图
      CREATEINDEX--为数据库表创立一个索引
      DROPINDEX--从数据库中删除索引
      CREATEPROCEDURE--创立一个存储历程
      DROPPROCEDURE--从数据库中删除存储历程
      CREATETRIGGER--创立一个触发器
      DROPTRIGGER--从数据库中删除触发器
      CREATESCHEMA--向数据库增加一个新形式
      DROPSCHEMA--从数据库中删除一个形式
      CREATEDOMAIN--创立一个数据值域
      ALTERDOMAIN--改动域界说
      DROPDOMAIN--从数据库中删除一个域
  --数据把持
  GRANT--授与用户会见权限
      DENY--回绝用户会见
      REVOKE--排除用户会见权限
  --事件把持
  COMMIT--停止以后事件
      ROLLBACK--中断以后事件
      SETTRANSACTION--界说以后事件数据会见特性
  --程序化SQL
  DECLARE--为查询设定游标
      EXPLAN--为查询形貌数据会见企图
      OPEN--检索查询了局翻开一个游标
      FETCH--检索一行查询了局
      CLOSE--封闭游标
      PREPARE--为静态实行筹办SQL语句
      EXECUTE--静态地实行SQL语句
      DESCRIBE--形貌筹办好的查询  
  ---部分变量
  declare@idchar(10)
      --set@id=10010001
      select@id=10010001  
  ---全局变量
  ---必需以@@开首  
  --IFELSE
  
declare@xint@yint@zint
      select@x=1@y=2@z=3
      if@x>@y
      printx>y--打印字符串x>y
      elseif@y>@z
      printy>z
      elseprintz>y
      --CASE
      usepangu
      updateemployee
      sete_wage=
      case
      whenjob_level=’1’thene_wage*1.08
      whenjob_level=’2’thene_wage*1.07
      whenjob_level=’3’thene_wage*1.06
      elsee_wage*1.05
      end
      --WHILECONTINUEBREAK
      declare@xint@yint@cint
      select@x=1@y=1
      while@x<3
      begin
      print@x--打印变量x的值
      while@y<3
      begin
      select@c=100*@x+@y
      print@c--打印变量c的值
      select@y=@y+1
      end
      select@x=@x+1
      select@y=1
      end
      --WAITFOR
  --例守候1小时2分零3秒后才实行SELECT语句
  waitfordelay’01:02:03’
      select*fromemployee
    --例比及早晨11点零8分后才实行SELECT语句
    waitfortime’23:08:00’

SELECT  
  select*(列名)fromtable_name(表名)wherecolumn_nameoperatorvalueex宿主)
    select*fromstock_informationwherestockid=str(nid)
    stockname=str_name
    stocknamelike%findthis%
    stocknamelike[a-zA-Z]%---------([]指定值的局限)
    stocknamelike[^F-M]%---------(^扫除指定局限)
    ---------只能在利用like关头字的where子句中利用通配符)
    orstockpath=stock_path
    orstocknumber<1000
    andstockindex=24
    notstocksex=man
    stocknumberbetween20and100
    stocknumberin(10,20,30)
    orderbystockiddesc(asc)---------排序,desc-降序,asc-升序
    orderby1,2---------by列号
    stockname=(selectstocknamefromstock_informationwherestockid=4)
    ---------子查询
    ---------除非能确保内层select只前往一个行的值
    ---------不然应在外层where子句顶用一个in限制符
    selectdistinctcolumn_nameformtable_name
  ---------distinct指定检索独占的列值,不反复
    selectstocknumber,"stocknumber+10"=stocknumber+10fromtable_name
    selectstockname,"stocknumber"=count(*)fromtable_namegroupbystockname
    ---------groupby将表按行分组,指定列中有不异的值
    havingcount(*)=2---------having选定指定的组
  select*
    fromtable1,table2
wheretable1.id*=table2.id--------左内部毗连,table1中有的而table2中没有得以null暗示
    table1.id=*table2.id--------右内部毗连
    selectstocknamefromtable1
    union[all]--------union兼并查询了局集,all-保存反复行
    selectstocknamefromtable2 
  insert 
  insertintotable_name(Stock_name,Stock_number)value("xxx","xxxx"
  value(selectStockname,StocknumberfromStock_table2)
  -------value为select语句  
  update  
  updatetable_namesetStockname="xxx"[whereStockid=3]
  Stockname=default
  Stockname=null
  Stocknumber=Stockname+4  
  delete  
  deletefromtable_namewhereStockid=3
  truncatetable_name---------删除表中一切行,仍坚持表的完全性
  droptabletable_name---------完整删除表 
  altertable--------修正数据库表布局  
  altertabledatabase.owner.table_nameaddcolumn_namechar(2)null..
  sp_helptable_name--------显现表已有特性
  createtabletable_name(namechar(20),agesmallint,lnamevarchar(30))
  insertintotable_nameselect--------完成删除列的办法(创立新表)
  altertabletable_namedropconstraintStockname_default
  ---------删除Stockname的default束缚

经常使用函数(function)  
转换函数
convert(数据范例,值,格局)
  统计函数
  AVG--求均匀值
  COUNT--统计数量
  MAX--求最年夜值
  MIN--求最小值
  SUM--乞降 
  AVG
  usepangu
  selectavg(e_wage)asdept_avgWage
  fromemployee
  groupbydept_id  
  MAX
  --求人为最高的员工姓名
  usepangu
  selecte_name
  fromemployee
  wheree_wage=
  (selectmax(e_wage)
  fromemployee)  
  STDEV()
  --STDEV()函数前往表达式中一切数据的尺度差
  --STDEVP()
  --STDEVP()函数前往整体尺度差  
  VAR()
  --VAR()函数前往表达式中一切值的统计变异数  
  VARP()
  --VARP()函数前往整体变异数  
  算术函数  
  三角函数
  
SIN(float_expression)--前往以弧度暗示的角的正弦
  COS(float_expression)--前往以弧度暗示的角的余弦
  TAN(float_expression)--前往以弧度暗示的角的正切
  COT(float_expression)--前往以弧度暗示的角的余切
  反三角函数
ASIN(float_expression)--前往正弦是FLOAT值的以弧度暗示的角
  ACOS(float_expression)--前往余弦是FLOAT值的以弧度暗示的角
  ATAN(float_expression)--前往正切是FLOAT值的以弧度暗示的角
  ATAN2(float_expression1,float_expression2)
  ------前往正切是float_expression1/float_expres-sion2的以弧度暗示的角
  DEGREES(numeric_expression)
  ------把弧度转换为角度前往与表达式不异的数据范例可为
  ------INTEGER/MONEY/REAL/FLOAT范例
  RADIANS(numeric_expression)
------把角度转换为弧度前往与表达式不异的数据范例可为
  ------INTEGER/MONEY/REAL/FLOAT范例
  EXP(float_expression)--前往表达式的指数值
  LOG(float_expression)--前往表达式的天然对数值
  LOG10(float_expression)--前往表达式的以10为底的对数值
  SQRT(float_expression)--前往表达式的平方根

  
  取近似值函数
  CEILING(numeric_expression)
-------前往>=表达式的最小整数前往的数据范例与表达式不异可为
  -------INTEGER/MONEY/REAL/FLOAT范例
  FLOOR(numeric_expression)
-------前往<=表达式的最小整数前往的数据范例与表达式不异可为
  -------INTEGER/MONEY/REAL/FLOAT范例
  ROUND(numeric_expression)
-------前往以integer_expression为精度的四舍五进值前往的数据
  -------范例与表达式不异可为INTEGER/MONEY/REAL/FLOAT范例
  ABS(numeric_expression)
-------前往表达式的相对值前往的数据范例与表达式不异可为
  -------INTEGER/MONEY/REAL/FLOAT范例
  SIGN(numeric_expression)
-------测试参数的正负号前往0零值1负数或-1正数前往的数据范例
  -------与表达式不异可为INTEGER/MONEY/REAL/FLOAT范例
  PI()-------前往值为π即3.1415926535897936
  RAND([integer_expression])
-------用任选的[integer_expression]做种子值得出0-1间的随机浮点数

字符串函数
  ASCII()------函数前往字符表达式最左端字符的ASCII码值
  CHAR()------函数用于将ASCII码转换为字符
  ------假如没有输出0~255之间的ASCII码值CHAR函数会前往一个NULL值
  LOWER()------函数把字符串全体转换为小写
  UPPER()------函数把字符串全体转换为年夜写
  STR()------函数把数值型数据转换为字符型数据
  LTRIM()------函数把字符串头部的空格往失落
  RTRIM()------函数把字符串尾部的空格往失落
  LEFT(),RIGHT(),SUBSTRING()--函数前往部分字符串
  CHARINDEX(),PATINDEX()--函数前往字符串中某个指定的子串呈现的入手下手地位
  SOUNDEX()------函数前往一个四位字符码
  ------SOUNDEX函数可用来查找声响类似的字符串但SOUNDEX函数对数字和汉字均只前往0值
  DIFFERENCE()------函数前往由SOUNDEX函数前往的两个字符表达式的值的差别
  ------0两个SOUNDEX函数前往值的第一个字符分歧
  ------1两个SOUNDEX函数前往值的第一个字符不异
  ------2两个SOUNDEX函数前往值的第一二个字符不异
  ------3两个SOUNDEX函数前往值的第一二三个字符不异
  ------4两个SOUNDEX函数前往值完整不异同
  QUOTENAME()------函数前往被特定字符括起来的字符串
  /**//**//**//*selectquotename(abc,{)quotename(abc)
  运转了局以下
  {
  {abc}[abc]*/
  REPLICATE()------函数前往一个反复character_expression指定次数的字符串
  /**//**//**//*selectreplicate(abc,3)replicate(abc,-2)
  运转了局以下
  abcabcabcNULL*/
  REVERSE()------函数将指定的字符串的字符分列按次倒置
  REPLACE()------函数前往被交换了指定子串的字符串
  /**//**//**//*selectreplace(abc123g,123,def)
  运转了局以下
  
  abcdefg*/  
  SPACE()------函数前往一个有指定长度的空缺字符串
  STUFF()------函数用另外一子串交换字符串指定地位长度的子串  
  数据范例转换函数
  CAST()函数语法以下
  CAST()(AS[length])
  CONVERT()函数语法以下
  CONVERT()([length],[,style])
  selectcast(100+99aschar)convert(varchar(12),getdate())
  运转了局以下
  199Jan152000 
  日期函数
  DAY()------函数前往date_expression中的日期值
  MONTH()------函数前往date_expression中的月份值
  YEAR()------函数前往date_expression中的年份值
  DATEADD(,,)
  -----函数前往指定日期date加上指定的分外日时代隔number发生的新日期
  DATEDIFF(,,)
  -----函数前往两个指定日期在datepart方面的分歧的地方
  DATENAME(,------函数以字符串的情势前往日期的指定部分
  DATEPART(,------函数以整数值的情势前往日期的指定部分
  GETDATE()------函数以DATETIME的缺省格局前往体系以后的日期和工夫  
  体系函数
  APP_NAME()------函数前往以后实行的使用程序的称号
  COALESCE()-----函数前往浩瀚表达式中第一个非NULL表达式的值
  COL_LENGTH(<table_name>,<column_name>----函数前往表中指定字段的长度值
  COL_NAME(,----函数前往表中指定字段的称号即列名
  DATALENGTH()-----函数前往数据表达式的数据的实践长度
  DB_ID([database_name])------函数前往数据库的编号
  DB_NAME(database_id)------函数前往数据库的称号
  HOST_ID()-----函数前往服务器端盘算机的称号
  HOST_NAME()-----函数前往服务器端盘算机的称号
  IDENTITY([,seedincrement])[AScolumn_name])
  --IDENTITY()函数只在SELECTINTO语句中利用用于拔出一个identitycolumn列到新表中
  /**//**//**//*selectidentity(int,1,1)ascolumn_name
  intonewtable
  fromoldtable*/
  ISDATE()----函数判别所给定的表达式是不是为公道日期
  ISNULL(,--函数将表达式中的NULL值用指定值交换
  ISNUMERIC()----函数判别所给定的表达式是不是为公道的数值
  NEWID()----函数前往一个UNIQUEIDENTIFIER范例的数值
  NULLIF(,
  ----NULLIF函数在expression1与expression2相称时前往NULL值若不相称时则前往xpression1的值*******************Transact_SQL********************
--语句功能
--数据操纵
SELECT--从数据库表中检索数据行和列
INSERT--向数据库表增加新数据行
DELETE--从数据库表中删除数据行
UPDATE--更新数据库表中的数据
--数据界说
CREATETABLE--创立一个数据库表
DROPTABLE--从数据库中删除表
ALTERTABLE--修正数据库表布局
CREATEVIEW--创立一个视图
DROPVIEW--从数据库中删除视图
CREATEINDEX--为数据库表创立一个索引
DROPINDEX--从数据库中删除索引
CREATEPROCEDURE--创立一个存储历程
DROPPROCEDURE--从数据库中删除存储历程
CREATETRIGGER--创立一个触发器
DROPTRIGGER--从数据库中删除触发器
CREATESCHEMA--向数据库增加一个新形式
DROPSCHEMA--从数据库中删除一个形式
CREATEDOMAIN--创立一个数据值域
ALTERDOMAIN--改动域界说
DROPDOMAIN--从数据库中删除一个域
--数据把持
GRANT--授与用户会见权限
DENY--回绝用户会见
REVOKE--排除用户会见权限
--事件把持
COMMIT--停止以后事件
ROLLBACK--中断以后事件
SETTRANSACTION--界说以后事件数据会见特性
--程序化SQL
DECLARE--为查询设定游标
EXPLAN--为查询形貌数据会见企图
OPEN--检索查询了局翻开一个游标
FETCH--检索一行查询了局
CLOSE--封闭游标
PREPARE--为静态实行筹办SQL语句
EXECUTE--静态地实行SQL语句
DESCRIBE--形貌筹办好的查询
---部分变量
declare@idchar(10)
--set@id=10010001
select@id=10010001
---全局变量
---必需以@@开首
--IFELSE
declare@xint@yint@zint
select@x=1@y=2@z=3
if@x>@y
printx>y--打印字符串x>y
elseif@y>@z
printy>z
elseprintz>y
--CASE
usepangu
updateemployee
sete_wage=
case
whenjob_level=’1’thene_wage*1.08
whenjob_level=’2’thene_wage*1.07
whenjob_level=’3’thene_wage*1.06
elsee_wage*1.05
end
--WHILECONTINUEBREAK
declare@xint@yint@cint
select@x=1@y=1
while@x<3
begin
print@x--打印变量x的值
while@y<3
begin
select@c=100*@x+@y
print@c--打印变量c的值
select@y=@y+1
end
select@x=@x+1
select@y=1
end
--WAITFOR
--例守候1小时2分零3秒后才实行SELECT语句
waitfordelay’01:02:03’
select*fromemployee
--例比及早晨11点零8分后才实行SELECT语句
waitfortime’23:08:00’
select*fromemployee
***SELECT***
select*(列名)fromtable_name(表名)wherecolumn_nameoperatorvalue
ex:(宿主)
select*fromstock_informationwherestockid=str(nid)
stockname=str_name
stocknamelike%findthis%
stocknamelike[a-zA-Z]%---------([]指定值的局限)
stocknamelike[^F-M]%---------(^扫除指定局限)
---------只能在利用like关头字的where子句中利用通配符)
orstockpath=stock_path
orstocknumber<1000
andstockindex=24
notstocksex=man
stocknumberbetween20and100
stocknumberin(10,20,30)
orderbystockiddesc(asc)---------排序,desc-降序,asc-升序
orderby1,2---------by列号
stockname=(selectstocknamefromstock_informationwherestockid=4)
---------子查询
---------除非能确保内层select只前往一个行的值,
---------不然应在外层where子句顶用一个in限制符
selectdistinctcolumn_nameformtable_name---------distinct指定检索独占的列值,不反复
selectstocknumber,"stocknumber+10"=stocknumber+10fromtable_name
selectstockname,"stocknumber"=count(*)fromtable_namegroupbystockname
---------groupby将表按行分组,指定列中有不异的值
havingcount(*)=2---------having选定指定的组

select*
fromtable1,table2
wheretable1.id*=table2.id--------左内部毗连,table1中有的而table2中没有得以null暗示
table1.id=*table2.id--------右内部毗连
selectstocknamefromtable1
union[all]-----union兼并查询了局集,all-保存反复行
selectstocknamefromtable2
***insert***
insertintotable_name(Stock_name,Stock_number)value("xxx","xxxx")
value(selectStockname,StocknumberfromStock_table2)---value为select语句
***update***
updatetable_namesetStockname="xxx"[whereStockid=3]
Stockname=default
Stockname=null
Stocknumber=Stockname+4
***delete***
deletefromtable_namewhereStockid=3
truncatetable_name-----------删除表中一切行,仍坚持表的完全性
droptabletable_name---------------完整删除表
***altertable***---修正数据库表布局
altertabledatabase.owner.table_nameaddcolumn_namechar(2)null..
sp_helptable_name----显现表已有特性
createtabletable_name(namechar(20),agesmallint,lnamevarchar(30))
insertintotable_nameselect-----完成删除列的办法(创立新表)
altertabletable_namedropconstraintStockname_default----删除Stockname的default束缚

***function(/**//*经常使用函数*/)***
----统计函数----
AVG--求均匀值
COUNT--统计数量
MAX--求最年夜值
MIN--求最小值
SUM--乞降
--AVG
usepangu
selectavg(e_wage)asdept_avgWage
fromemployee
groupbydept_id
--MAX
--求人为最高的员工姓名
usepangu
selecte_name
fromemployee
wheree_wage=
(selectmax(e_wage)
fromemployee)
--STDEV()
--STDEV()函数前往表达式中一切数据的尺度差
--STDEVP()
--STDEVP()函数前往整体尺度差
--VAR()
--VAR()函数前往表达式中一切值的统计变异数
--VARP()
--VARP()函数前往整体变异数
----算术函数----
/**//***三角函数***/
SIN(float_expression)--前往以弧度暗示的角的正弦
COS(float_expression)--前往以弧度暗示的角的余弦
TAN(float_expression)--前往以弧度暗示的角的正切
COT(float_expression)--前往以弧度暗示的角的余切
/**//***反三角函数***/
ASIN(float_expression)--前往正弦是FLOAT值的以弧度暗示的角
ACOS(float_expression)--前往余弦是FLOAT值的以弧度暗示的角
ATAN(float_expression)--前往正切是FLOAT值的以弧度暗示的角
ATAN2(float_expression1,float_expression2)
--前往正切是float_expression1/float_expres-sion2的以弧度暗示的角
DEGREES(numeric_expression)
--把弧度转换为角度前往与表达式不异的数据范例可为
--INTEGER/MONEY/REAL/FLOAT范例
RADIANS(numeric_expression)--把角度转换为弧度前往与表达式不异的数据范例可为
--INTEGER/MONEY/REAL/FLOAT范例
EXP(float_expression)--前往表达式的指数值
LOG(float_expression)--前往表达式的天然对数值
LOG10(float_expression)--前往表达式的以10为底的对数值
SQRT(float_expression)--前往表达式的平方根
/**//***取近似值函数***/
CEILING(numeric_expression)--前往>=表达式的最小整数前往的数据范例与表达式不异可为
--INTEGER/MONEY/REAL/FLOAT范例
FLOOR(numeric_expression)--前往<=表达式的最小整数前往的数据范例与表达式不异可为
--INTEGER/MONEY/REAL/FLOAT范例
ROUND(numeric_expression)--前往以integer_expression为精度的四舍五进值前往的数据
--范例与表达式不异可为INTEGER/MONEY/REAL/FLOAT范例
ABS(numeric_expression)--前往表达式的相对值前往的数据范例与表达式不异可为
--INTEGER/MONEY/REAL/FLOAT范例
SIGN(numeric_expression)--测试参数的正负号前往0零值1负数或-1正数前往的数据范例
--与表达式不异可为INTEGER/MONEY/REAL/FLOAT范例
PI()--前往值为π即3.1415926535897936
RAND([integer_expression])--用任选的[integer_expression]做种子值得出0-1间的随机浮点数

----字符串函数----
ASCII()--函数前往字符表达式最左端字符的ASCII码值
CHAR()--函数用于将ASCII码转换为字符
--假如没有输出0~255之间的ASCII码值CHAR函数会前往一个NULL值
LOWER()--函数把字符串全体转换为小写
UPPER()--函数把字符串全体转换为年夜写
STR()--函数把数值型数据转换为字符型数据
LTRIM()--函数把字符串头部的空格往失落
RTRIM()--函数把字符串尾部的空格往失落
LEFT(),RIGHT(),SUBSTRING()--函数前往部分字符串
CHARINDEX(),PATINDEX()--函数前往字符串中某个指定的子串呈现的入手下手地位
SOUNDEX()--函数前往一个四位字符码
--SOUNDEX函数可用来查找声响类似的字符串但SOUNDEX函数对数字和汉字均只前往0值
DIFFERENCE()--函数前往由SOUNDEX函数前往的两个字符表达式的值的差别
--0两个SOUNDEX函数前往值的第一个字符分歧
--1两个SOUNDEX函数前往值的第一个字符不异
--2两个SOUNDEX函数前往值的第一二个字符不异
--3两个SOUNDEX函数前往值的第一二三个字符不异
--4两个SOUNDEX函数前往值完整不异

QUOTENAME()--函数前往被特定字符括起来的字符串
/**//*selectquotename(abc,{)quotename(abc)
运转了局以下
----------------------------------{
{abc}[abc]*/
REPLICATE()--函数前往一个反复character_expression指定次数的字符串
/**//*selectreplicate(abc,3)replicate(abc,-2)
运转了局以下
----------------------
abcabcabcNULL*/
REVERSE()--函数将指定的字符串的字符分列按次倒置
REPLACE()--函数前往被交换了指定子串的字符串
/**//*selectreplace(abc123g,123,def)
运转了局以下
----------------------
abcdefg*/
SPACE()--函数前往一个有指定长度的空缺字符串
STUFF()--函数用另外一子串交换字符串指定地位长度的子串

----数据范例转换函数----
CAST()函数语法以下
CAST()(<expression>AS<data_type>[length])
CONVERT()函数语法以下
CONVERT()(<data_type>[length],<expression>[,style])
selectcast(100+99aschar)convert(varchar(12),getdate())
运转了局以下
------------------------------------------
199Jan152000
----日期函数----

DAY()--函数前往date_expression中的日期值
MONTH()--函数前往date_expression中的月份值
YEAR()--函数前往date_expression中的年份值
DATEADD(<datepart>,<number>,<date>)
--函数前往指定日期date加上指定的分外日时代隔number发生的新日期
DATEDIFF(<datepart>,<number>,<date>)
--函数前往两个指定日期在datepart方面的分歧的地方
DATENAME(<datepart>,<date>)--函数以字符串的情势前往日期的指定部分
DATEPART(<datepart>,<date>)--函数以整数值的情势前往日期的指定部分
GETDATE()--函数以DATETIME的缺省格局前往体系以后的日期和工夫
----体系函数----

APP_NAME()--函数前往以后实行的使用程序的称号
COALESCE()--函数前往浩瀚表达式中第一个非NULL表达式的值
COL_LENGTH(<table_name>,<column_name>)--函数前往表中指定字段的长度值
COL_NAME(<table_id>,<column_id>)--函数前往表中指定字段的称号即列名
DATALENGTH()--函数前往数据表达式的数据的实践长度
DB_ID([database_name])--函数前往数据库的编号
DB_NAME(database_id)--函数前往数据库的称号
HOST_ID()--函数前往服务器端盘算机的称号
HOST_NAME()--函数前往服务器端盘算机的称号
IDENTITY(<data_type>[,seedincrement])[AScolumn_name])
--IDENTITY()函数只在SELECTINTO语句中利用用于拔出一个identitycolumn列到新表中
/**//**//**//*selectidentity(int,1,1)ascolumn_name
intonewtable
fromoldtable*/
ISDATE()--函数判别所给定的表达式是不是为公道日期
ISNULL(<check_expression>,<replacement_value>)--函数将表达式中的NULL值用指定值交换
ISNUMERIC()--函数判别所给定的表达式是不是为公道的数值
NEWID()--函数前往一个UNIQUEIDENTIFIER范例的数值
NULLIF(<expression1>,<expression2>)
--NULLIF函数在expression1与expression2相称时前往NULL值若不相称时则前往expression1的值

“数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE命令以及INSERT、UPDATE和DELETE命令。
蒙在股里 该用户已被删除
沙发
发表于 2015-1-19 10:57:26 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
若相依 该用户已被删除
板凳
发表于 2015-1-25 14:47:05 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
山那边是海 该用户已被删除
地板
发表于 2015-2-2 22:33:52 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
灵魂腐蚀 该用户已被删除
5#
发表于 2015-2-8 17:02:58 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
兰色精灵 该用户已被删除
6#
发表于 2015-2-25 21:17:28 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
因胸联盟 该用户已被删除
7#
发表于 2015-3-8 05:00:55 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
老尸 该用户已被删除
8#
发表于 2015-3-15 21:08:48 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
飘灵儿 该用户已被删除
9#
发表于 2015-3-22 04:17:35 | 只看该作者
需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 11:09

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表