首页 - 数据库 - SQL Server

精典SQL FAQ收藏

发布时间: 2007-04-19 05:04    作者: 未知    来源: 未知    浏览:    评论


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

1. 行列转换--普通

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

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

declare @sql varchar(4000)set @sql = 'select Name'select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']' from (select distinct Subject from CJ) as aselect @sql = @sql+' from test group by name'exec(@sql)

2. 行列转换--合并

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

创建一个合并的函数create function fmerg(@id int)returns varchar(8000)asbegindeclare @str varchar(8000)set @str=''select @str=@str+','+cast(pid as varchar) from 表A where id=@idset @str=right(@str,len(@str)-1)return(@str)Endgo

--调用自定义函数得到结果select distinct id,dbo.fmerg(id) from 表A

3. 如何取得一个数据表的所有列名

方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。SQL语句如下:declare @objid int,@objname char(40)set @objname = 'tablename'select @objid = id from sysobjects where id = object_id(@objname)select 'Column_name' = name from syscolumns where id = @objid order by colid

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

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         )

7. 查询第xxx行数据

假设id是主键:  select  *  from  (select  top  xxx  *  from  yourtable)  aa  where  not  exists(select  1  from  (select  top  xxx-1  *  from  yourtable)  bb  where  aa.id=bb.id)  如果使用游标也是可以的  fetch  absolute  [number]  from  [cursor_name]  行数为绝对行数

8. SQL Server日期计算a. 一个月的第一天SELECT  DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0)  b. 本周的星期一SELECT  DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0) c. 一年的第一天SELECT  DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0)  d. 季度的第一天SELECT  DATEADD(qq,  DATEDIFF(qq,0,getdate()),  0)  e. 上个月的最后一天 SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0))  f. 去年的最后一天SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0)) g. 本月的最后一天SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate())+1,  0))  h. 本月的第一个星期一select  DATEADD(wk,  DATEDIFF(wk,0,                                                                                         dateadd(dd,6-datepart(day,getdate()),getdate())                                                                                                         ),  0)      i. 本年的最后一天SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate())+1,  0))。



感谢那些网上提供相关SQL的作者

TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多