若相依 发表于 2015-1-16 22:40:14

MSSQL网页编程之精典SQL FAQ保藏

mysql的prepare其实是本地PHP客户端模拟的,并没有根据你mysql的设置做字符集的调整。应该交与mysqlserver端做prepare,同时得调用mysql_set_character_set去操作,server才会按照字符集去做转义。
在网上常常转,经常看到有些工资了求得某些SQL语句而焦头烂额,如今我出格把本人保藏的一些对照精典的SQL拿出来和人人分享一下

1.行列转换--一般

假定有张先生成就表(CJ)以下NameSubjectResult张三语文80张三数学90张三物理85李四语文85李四数学92李四物理82

想酿成姓名语文数学物理张三809085李四859282

declare@sqlvarchar(4000)set@sql=selectNameselect@sql=@sql+,sum(caseSubjectwhen+Subject+thenResultend)[+Subject+]from(selectdistinctSubjectfromCJ)asaselect@sql=@sql+fromtestgroupbynameexec(@sql)

2.行列转换--兼并

有表A,idpid111213212231怎样化成表B:idpid11,2,321,231

创立一个兼并的函数createfunctionfmerg(@idint)returnsvarchar(8000)asbegindeclare@strvarchar(8000)set@str=select@str=@str+,+cast(pidasvarchar)from表Awhereid=@idset@str=right(@str,len(@str)-1)return(@str)Endgo

--挪用自界说函数失掉了局selectdistinctid,dbo.fmerg(id)from表A

3.怎样获得一个数据表的一切列名

办法以下:先从SYSTEMOBJECT体系表中获得数据表的SYSTEMID,然后再SYSCOLUMN表中获得该数据表的一切列名。SQL语句以下:declare@objidint,@objnamechar(40)set@objname=tablenameselect@objid=idfromsysobjectswhereid=object_id(@objname)selectColumn_name=namefromsyscolumnswhereid=@objidorderbycolid

是否是太复杂了?呵呵不外常常用阿.

4.经由过程SQL语句来变动用户的暗码

修正他人的,必要sysadminroleEXECsp_passwordNULL,newpassword,User

假如帐号为SA实行EXECsp_passwordNULL,newpassword,sa

5.怎样判别出一个表的哪些字段不同意为空?

selectCOLUMN_NAMEfromINFORMATION_SCHEMA.COLUMNSwhereIS_NULLABLE=NOandTABLE_NAME=tablename

6.怎样在数据库里找到含有不异字段的表?a.查已知列名的情形SELECTb.nameasTableName,a.nameascolumnnameFromsyscolumnsaINNERJOINsysobjectsbONa.id=b.idANDb.type=UANDa.name=你的字段名字

b.未知列名查一切在分歧表呈现过的列名Selecto.nameAstablename,s1.nameAscolumnnameFromsyscolumnss1,sysobjectsoWheres1.id=o.idAndo.type=UAndExists(Select1Fromsyscolumnss2Wheres1.name=s2.nameAnds1.ids2.id)

7.查询第xxx行数据

假定id是主键:select*from(selecttopxxx*fromyourtable)aawherenotexists(select1from(selecttopxxx-1*fromyourtable)bbwhereaa.id=bb.id)假如利用游标也是能够的fetchabsolutefrom行数为相对行数

8.SQLServer日期盘算a.一个月的第一天SELECTDATEADD(mm,DATEDIFF(mm,0,getdate()),0)b.本周的礼拜一SELECTDATEADD(wk,DATEDIFF(wk,0,getdate()),0)c.一年的第一天SELECTDATEADD(yy,DATEDIFF(yy,0,getdate()),0)d.季度的第一天SELECTDATEADD(qq,DATEDIFF(qq,0,getdate()),0)e.上个月的最初一天SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))f.客岁的最初一天SELECTdateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))g.本月的最初一天SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))h.本月的第一个礼拜一selectDATEADD(wk,DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),0)i.今年的最初一天SELECTdateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))。



感激那些网上供应相干SQL的作者
你看出了作者的深度?深处半米!当初是冲那么多的大牛给他写序才买的,后来才发现无啥内容,作者也只是才用几年的新手,百花了几十两银子,再次感叹当今社会的虚伪与浮躁

第二个灵魂 发表于 2015-1-19 21:09:12

SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)

兰色精灵 发表于 2015-1-28 10:44:12

大侠们有推荐的书籍和学习方法写下吧。

飘飘悠悠 发表于 2015-2-5 20:45:08

而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~

爱飞 发表于 2015-2-13 13:29:48

SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)

因胸联盟 发表于 2015-3-3 22:17:46

相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐

再现理想 发表于 2015-3-11 14:16:19

理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识

飘灵儿 发表于 2015-3-18 20:46:38

备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。

精灵巫婆 发表于 2015-3-26 14:24:59

语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
页: [1]
查看完整版本: MSSQL网页编程之精典SQL FAQ保藏