网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

t_sql大全(1)

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
把长日期转换为短日期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.杀掉所有的事件探察器进程:
    DECLAREhcforeachCURSORGLOBALFORSELECT'kill'+RTRIM(spid)FROMmaster.dbo.sysprocesses
    WHEREprogram_nameIN('SQLprofiler',N'SQL事件探查器')
    EXECsp_msforeach_worker'?'
    7.记录搜索:
    开头到N条记录
    SelectTopN*From表
    -------------------------------
    N到M条记录(要有主索引ID)
    SelectTopM-N*From表WhereIDin(SelectTopMIDFrom表)OrderbyIDDesc
    ----------------------------------
    N到结尾记录
    SelectTopN*From表OrderbyIDDesc
    8.如何修改数据库的名称:
    sp_renamedb'old_name','new_name'
    9:获取当前数据库中的所有用户表
    selectNamefromsysobjectswherextype='u'andstatus>=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].[标题]:
    一、只复制一个表结构,不复制数据
    
    selecttop0*into[t1]from[t2]
    二、获取数据库中某个对象的创建脚本
    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_oacreate'sqldmo.sqlserver',@srvidoutput
    if@err<>0gotolberr
    --连接服务器
    ifisnull(@userid,'')=''--如果是Nt验证方式
    begin
    exec@err=sp_oasetproperty@srvid,'loginsecure',1
    if@err<>0gotolberr
    exec@err=sp_oamethod@srvid,'connect',null,@servername
    end
    else
    exec@err=sp_oamethod@srvid,'connect',null,@servername,@userid,@password
    if@err<>0gotolberr
    --获取数据库集
    exec@err=sp_oagetproperty@srvid,'databases',@dbsidoutput
    if@err<>0gotolberr
    --获取要取得脚本的数据库id
    exec@err=sp_oamethod@dbsid,'item',@dbidoutput,@databasename
    if@err<>0gotolberr
    --获取要取得脚本的对象id
    exec@err=sp_oamethod@dbid,'getobjectbyname',@tbidoutput,@objectname
    if@err<>0gotolberr
    --取得脚本
    exec@err=sp_oamethod@tbid,'script',@reoutput
    if@err<>0gotolberr
    --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邹建邹老大提供的
    三、分隔字符串
    如果有一个用逗号分割开的字符串,比如说"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(@location<>0)
    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(@location<>0and@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)
    四、一条语句执行跨越若干个数据库
    我要在一条语句里操作不同的服务器上的不同的数据库里的不同的表,怎么办呢?
    第一种方法:
    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
    五、怎样获取一个表中所有的字段信息
    推荐:怎样获取一个表中所有字段的信息
    先创建一个视图
    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.nameelse''end)N'表名',
    a.colorderN'字段序号',
    a.nameN'字段名',
    (casewhenCOLUMNPROPERTY(a.id,a.name,'IsIdentity')=1then'√'else''end)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'√'else''end)N'主键',
    b.nameN'类型',
    a.lengthN'占用字节数',
    COLUMNPROPERTY(a.id,a.name,'PRECISION')asN'长度',
    isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0)asN'小数位数',
    (casewhena.isnullable=1then'√'else''end)N'允许空',
    isnull(e.text,'')N'默认值',
    isnull(g.[value],'')ASN'字段说明'
    --into##tx
    FROMsyscolumnsaleftjoinsystypesb
    ona.xtype=b.xusertype
    innerjoinsysobjectsd
    ona.id=d.idandd.xtype='U'andd.name<>'dtproperties'
    leftjoinsyscommentse
    ona.cdefault=e.id
    leftjoinsyspropertiesg
    ona.id=g.idANDa.colid=g.smallid
    orderbyobject_name(a.id),a.colorder
    六、时间格式转换问题
    因为新开发的软件需要用一些旧软件生成的一些数据,在时间格式上不统一,只能手工转换,研究了一下午写了三条语句,以前没怎么用过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))=1THEN'0'+CONVERT(varchar(2),
    month(shenling))ELSECONVERT(varchar(2),month(shenling))
    END+'-'+CASEWHENLEN(day(shenling))=1THEN'0'+CONVERT(char(2),
    day(shenling))ELSECONVERT(varchar(2),day(shenling))END
    WHERE(zhiyezheng='139770070153')
    七、分区视图
    分区视图是提高查询性能的一个很好的办法
    --看下面的示例
    --示例表
    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行)
    ==*/
    八、树型的实现
    --树形数据查询示例
    --示例数据
    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
    
    九、排序问题
    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
    
    十、一条语句删除一批记录
    首先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)
    十一、获取子表内的一列数据的组合字符串
    下面这个函数获取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
    print'x>y'--打印字符串'x>y'
    elseif@y>@z
    print'y>z'
    elseprint'z>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
    print'x>y'--打印字符串'x>y'
    elseif@y>@z
    print'y>z'
    elseprint'z>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()(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值若不相等时则返回expression1的值
    
  • 上一篇资讯: t_sql大全
  • 下一篇资讯: TSQL语言
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师