精典SQLFAQ收藏

来源:互联网 发布:java中this与super 编辑:程序博客网 时间:2024/06/11 11:21
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

在网上经常转,常常看到有些人为了求得某些SQL语句而焦头烂额,现在我特别把自己收藏的一些比较精典的SQL拿出来和大家分享一下

1.行列转换--普通

假设有张学生成绩表(CJ)如下Name   Subject    Result张三   语文       80张三   数学       90张三   物理       85李四   语文       85李四   数学       92李四   物理       82

想变成   姓名  语文  数学  物理张三  80    90    85李四  85    92    82

declare@sqlvarchar(4000)set@sql='selectName'select@sql=@sql+',sum(caseSubjectwhen'''+Subject+'''thenResultend)['+Subject+']' from(selectdistinctSubjectfromCJ)asaselect@sql=@sql+'fromtestgroupbyname'exec(@sql)

2.行列转换--合并

有表A, idpid 1  1 1  2 1  3 2  1 2  2 3  1如何化成表B: idpid 1 1,2,3 2 1,2 3 1

创建一个合并的函数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='tablename'select@objid=idfromsysobjectswhereid=object_id(@objname)select'Column_name'=namefromsyscolumnswhereid=@objidorderbycolid

是不是太简单了?呵呵不过经常用阿.

4.通过SQL语句来更改用户的密码

修改别人的,需要sysadmin role   EXEC sp_password NULL, 'newpassword', 'User'

如果帐号为SA执行EXEC sp_password NULL, 'newpassword', sa 

5.怎么判断出一个表的哪些字段不允许为空?

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=tablename 

6.如何在里找到含有相同字段的表?a.查已知列名的情况SELECT b.name as TableName,a.name as columnname From syscolumns   a INNER JOIN   sysobjects b   ON a.id=b.id   AND b.type='U'   AND a.name='你的字段名字' 

b.未知列名查所有在不同表出现过的列名Select o.name As tablename,s1.name As columnname From syscolumns s1, sysobjects o Where s1.id = o.id   And o.type = 'U'   And Exists (       Select 1 From syscolumns s2         Where s1.name = s2.name         And s1.id <> s2.id       )1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击