设为首页 收藏本站
查看: 1202|回复: 0

[经验分享] SQL SERVER学习日志

[复制链接]

尚未签到

发表于 2016-10-30 09:45:04 | 显示全部楼层 |阅读模式
SQL SERVER学习日志<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  

By yanleigis 联系Email:landgis@126.com  

一、 系统表  

1、 Sysobjects: 为数据库内创建的每个对象(约束,规则,表,视图,触发器等)创建一条记录。  

该表相关字段的含义如下:  

sysobjects.name 对象名,如:表名,视图名。  

sysobjects.id 对象id。  

sysobjects.type 对象类型(p存储过程,v视图,s系统表,u用户表,
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程
)。  

应用实例:判断一个表是否存在  

select * from sysobjects where name='cp_flowCode' and type='u' 只支持小写,字符串为单引号  

2、  Syscolumns:视图中的每个列和每个存储过程的每个参数创建一条记录。    

该表相关字段的含义如下:(此处的列系指数据库中每个表、视图中的列)  

syscolumns. id 该列所属的表的id,可与sysobjects.id相关联  

syscolumns.colid id,表示该列是表或视图的第几列。  

syscolumns. xtype 物理存储类型,可与systypes. xusertype相关联。  

syscolumns.name 列名字,即字段名。  

syscolumns .prec列的长度。  

syscolumns .scale 精度级。  

应用实例1、判断一个表的某个字段是否存在  

select o.name,c.* from syscolumns c,  

sysobjects o where o.id=c.id  

and c.name='f_code' and o.name='cantoncode'  

应用实例2:获得一个表的结构sql:  

select c.name,t.name,c.PREC,isnull(c.Scale,0),c.isnullable from syscolumns c,  

sysobjects o,systypes t where o.id=c.id  

and o.name='cantoncode' and t.xusertype  

=c.xtype

更全面的,包括默认值
SELECT Sysobjects.name AS TABLE_NAME, syscolumns.Id, syscolumns.name AS COLUMN_NAME,
systypes.name AS DATA_TYPE, syscolumns.length as CHARACTER_MAXIMUM_LENGTH,
sysproperties.[value] AS COLUMN_DESCRIPTION, syscomments.text as
COLUMN_DEFAULT,syscolumns.isnullable as IS_NULLABLE FROM syscolumns
INNER JOIN systypes
ON syscolumns.xtype = systypes.xtype
LEFT JOIN sysobjects ON syscolumns.id = sysobjects.id
LEFT OUTER JOIN sysproperties ON
( sysproperties.smallid = syscolumns.colid
AND sysproperties.id = syscolumns.id)
LEFT OUTER JOIN syscomments ON syscolumns.cdefault = syscomments.id
WHERE syscolumns.id IN
(SELECT id FROM SYSOBJECTS WHERE xtype = 'U') AND (systypes.name <> 'sysname')
ORDER BY Sysobjects.name, syscolumns.colid
二、 函数学习  

  1.字符串函数
  长度与分析用
  datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格
  substring(expression,start,length) 不多说了,取子串
  right(char_expr,int_expr) 返回字符串右边int_expr个字符
  字符操作类
  upper(char_expr) 转为大写
  lower(char_expr) 转为小写
  space(int_expr) 生成int_expr个空格
  replicate(char_expr,int_expr)复制字符串int_expr次
  reverse(char_expr) 反转字符串
  stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从
  start开始的length个字符用char_expr2代替
  ltrim(char_expr) rtrim(char_expr) 取掉空格
  ascii(char) char(ascii) 两函数对应,取ascii码,根据ascii吗取字符
  字符串查找
  charindex(char_expr,expression) 返回char_expr的起始位置
  patindex("%pattern%",expression) 返回指定模式的起始位置,否则为0
  2.数学函数
  abs(numeric_expr) 求绝对值
  ceiling(numeric_expr) 取大于等于指定值的最小整数
  exp(float_expr) 取指数
  floor(numeric_expr) 小于等于指定值得最大整数
  pi() 3.1415926.........
  power(numeric_expr,power) 返回power次方
  rand([int_expr]) 随机数产生器
  round(numeric_expr,int_expr) 安int_expr规定的精度四舍五入
  sign(int_expr) 根据正数,0,负数,,返回+1,0,-1
  sqrt(float_expr) 平方根
  3.日期函数
  getdate() 返回日期
  datename(datepart,date_expr) 返回名称如 June
  datepart(datepart,date_expr) 取日期一部份
  datediff(datepart,date_expr1.dateexpr2) 日期差
  dateadd(datepart,number,date_expr) 返回日期加上 number
  上述函数中datepart的
  写法 取值和意义
  yy 1753-9999 年份
  qq 1-4 刻
  mm 1-12 月
  dy 1-366 日
  dd 1-31 日
  wk 1-54 周
  dw 1-7 周几
  hh 0-23 小时
  mi 0-59 分钟
  ss 0-59 秒
  ms 0-999 毫秒
  日期转换
  convert()
  4.系统函数
  suser_name() 用户登录名
  user_name() 用户在数据库中的名字
  user 用户在数据库中的名字
  db_name() 数据库名
  object_name(obj_id) 数据库对象名
  col_name(obj_id,col_id) 列名
  col_length(objname,colname) 列长度
  valid_name(char_expr) 是否是有效标识符
  

三、 JOIN的应用  

  

左向外联接:LEFT JOIN 等同LEFT OUTER JOIN。返回第一个表的信息  

右向外联接:RIGHT JOIN 等RIGHT OUTER JOIN。返回第二个表的信息
全联:FULL JOIN 或 FULL OUTER JOIN。完整外部联接返回左表和右表中的所有行。  

例子:  

reate table a (a int,b int)   

create table b (a int,b int)   

insert a values(1,1)   

insert a values(2,2)   

insert b values(1,1)   

insert b values(3,3);  

1、--左联   

select * from a Aa left join b Bb on Aa.a=Bb.a   

结果:  

1 1 1 1  

2 2 NULL NULL  

2、--右:   

select * from a Aa right join b Bb on Aa.a=Bb.a  

结果:  

1 1 1 1  

NULL NULL 3 3  

3、--内   

select * from a Aa join b Bb on Aa.a=Bb.a  

结果:  

1 1 1 1  

4、--外:   

select * from a Aa full join b Bb on Aa.a=Bb.a  

结果:  

1 1 1 1  

NULL NULL 3 3  

2 2 NULL NULL  

4、----完全   

select * from a,b   

结果:  

1 1 1 1  

2 2 1 1  

1 1 3 3  

2 2 3 3  

四、   

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-293246-1-1.html 上篇帖子: SQL SERVER内置函数 下篇帖子: SQL Server —— convert用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表