数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQL高手篇:精典SQL FAQ收藏


发布日期:2024年07月20日
 
SQL高手篇:精典SQL FAQ收藏

行列转换普通

假设有张学生成绩表(CJ)如下

NameSubject Result

张三语文

张三数学

张三物理

李四语文

李四数学

李四物理

想变成

姓名 语文 数学 物理

张三

李四

declare @sql varchar()

set @sql = select Name

select @sql = @sql + sum(case Subject when +Subject+ then Result end) [+Subject+]

from (select distinct Subject from CJ) as a

select @sql = @sql+ from test group by name

exec(@sql)

行列转换合并

有表A

id pid

如何化成表B:

id pid

创建一个合并的函数

create function fmerg(@id int)

returns varchar()

as

begin

declare @str varchar()

set @str=

select @str=@str++cast(pid as varchar) from 表A where id=@id

set @str=right(@strlen(@str))

return(@str)

End

go

调用自定义函数得到结果

select distinct iddbofmerg(id) from 表A

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

方法如下先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID然后再SYSCOLUMN表中取得该数据表的所有列名

SQL语句如下

declare @objid int@objname char()

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

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

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

修改别人的需要sysadminrole

EXECsp_passwordNULLnewpasswordUser

如果帐号为SA执行EXECsp_passwordNULLnewpasswordsa

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

selectCOLUMN_NAMEfromINFORMATION_SCHEMACOLUMNSwhereIS_NULLABLE=NOandTABLE_NAME=tablename

如何在数据库里找到含有相同字段的表?

a 查已知列名的情况

SELECTbnameasTableNameanameascolumnname

FromsyscolumnsaINNERJOINsysobjectsb

ONaid=bid

ANDbtype=U

ANDaname=你的字段名字

b 未知列名查所有在不同表出现过的列名

SelectonameAstablenamesnameAscolumnname

Fromsyscolumnsssysobjectso

Wheresid=oid

Andotype=U

AndExists(

SelectFromsyscolumnss

Wheresname=sname

Andsid<>sid

)

查询第xxx行数据

假设id是主键

select*

from(selecttopxxx*fromyourtable)aa

wherenotexists(selectfrom(selecttopxxx*fromyourtable)bbwhereaaid=bbid)

如果使用游标也是可以的

fetchabsolute[number]from[cursor_name]

行数为绝对行数

SQL Server日期计算

a 一个月的第一天

SELECTDATEADD(mmDATEDIFF(mmgetdate()))

b 本周的星期一

SELECTDATEADD(wkDATEDIFF(wkgetdate()))

c 一年的第一天

SELECTDATEADD(yyDATEDIFF(yygetdate()))

d 季度的第一天

SELECTDATEADD(qqDATEDIFF(qqgetdate()))

e 上个月的最后一天

SELECTdateadd(msDATEADD(mmDATEDIFF(mmgetdate())))

f 去年的最后一天

SELECTdateadd(msDATEADD(yyDATEDIFF(yygetdate())))

g 本月的最后一天

SELECTdateadd(msDATEADD(mmDATEDIFF(mgetdate())+))

h 本月的第一个星期一

selectDATEADD(wkDATEDIFF(wk

dateadd(dddatepart(daygetdate())getdate())))

i 本年的最后一天

SELECTdateadd(msDATEADD(yyDATEDIFF(yygetdate())+))               

上一篇:VC在SQL Server7中动态增加/删除用户

下一篇:SQL数据操作基础(中级)8