精典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>
在网上经常转,常常看到有些人为了求得某些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>
在网上经常转,常常看到有些人为了求得某些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>
- 精典SQLFAQ收藏
- 精典SQL FAQ收藏
- 精典SQL收藏
- 收藏
- 收藏!
- 收藏
- 收藏
- 收藏
- 收藏
- 收藏
- 收藏
- 收藏
- 收藏
- 收藏
- 收藏
- 收藏
- 收藏
- 收藏
- sql的三个主要语句及一点技巧
- Ext2.0升级至Ext2.1 Ext.Panel的AJAX加载方式autoLoad参数使用的变化
- 一个子窗口向父窗口传值,使父窗口的下拉框选中的例子
- 连接中三个最常见错误原因分析
- 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。)
- 精典SQLFAQ收藏
- Java 多线程编程
- 自动安装
- 列出SQLSERVER所有表、字段定义,类型,长度,一个值等信息,并导出到中
- 如何学好JAVA
- 列出SQLSERVER所有表,字段名,主键,类型,长度,小数位数等信息
- c# repeater分页代码(比第一种效果好)
- SRVCTL命令详细说明文档(原译)
- 快速上手--1.入门实例