登录  /  注册
SqlServer数据库的语句及一些操作整理
php中文网
发布: 2016-06-07 15:40:25
原创
786人浏览过

临近年终,在工作之余对工作和学习中遇到的问题以及常用的一些知识点做了些整理,以备后用。本文涉及的内容为数据库,算是对开发总结(1)---数据库一文的补充。 1 对于主键设置了Identity的表,在删除表中数据后再往表中插入数据,Identity列不是从1起始了,如

临近年终,在工作之余对工作和学习中遇到的问题以及常用的一些知识点做了些整理,以备后用。本文涉及的内容为数据库,算是对开发总结(1)---数据库一文的补充。

1 对于主键设置了Identity的表,在删除表中数据后再往表中插入数据,Identity列不是从1起始了,如果想删除数据后Indentity列仍从1起始,可以用下面代码来删除数据。

truncate table tablename
DBCC CHECKIDENT(tablename,RESEED,1)
登录后复制

2 判断指定表在数据库中是否存在

if exists(select name from sysobjects where name='tablename' and type='u')
登录后复制

3 判断指定列在指定表中是否存在

if exists(select * from sys.columns,sys.tables 
      where sys.columns.object_id = sys.tables.object_id
      and sys.tables.name='tablename' and sys.columns.[name]='columnname')
登录后复制

4 在编写代码生成器之类的程序的时候,通常需要取出数据库中所有的表名以及表中字段的一些基本信息,如字段长度、字段类型、描述等。实现上面要求的sql语句如下:

--取数据库中表的集合
select * from sysobjects where xtype='u' order by name

--取表中字段的一些基本信息
select 
    sys.columns.name,  --字段名
    sys.types.name as typename, --字段类型
    sys.columns.max_length,    --字段长度
    sys.columns.is_nullable,    --是否可空
    (select 
        count(*) 
    from 
        sys.identity_columns 
    where 
        sys.identity_columns.object_id = sys.columns.object_id 
    and 
        sys.columns.column_id = sys.identity_columns.column_id
    ) as is_identity ,--是否自增

    (select 
        value 
    from 
        sys.extended_properties 
    where 
        sys.extended_properties.major_id = sys.columns.object_id 
    and 
        sys.extended_properties.minor_id = sys.columns.column_id
    ) as description  --注释
from 
    sys.columns, sys.tables, sys.types
where 
    sys.columns.object_id = sys.tables.object_id 
and 
    sys.columns.system_type_id=sys.types.system_type_id 
and 
    sys.tables.name='tablename'
order by sys.columns.column_id
登录后复制

5 在存储过程中使用事务

create procedure procname
as
begin tran  
    --执行sql语句

if @@ERROR!=0  
begin  
    rollback tran   --失败
end  
else  
begin  
    commit tran   --成功
end  
登录后复制

6 清除数据库日志

DUMP TRANSACTION DatabseName WITH NO_LOG
BACKUP LOG DatabseName WITH NO_LOG 
DBCC  SHRINKFILE(DatabseLogName,1) 
--DatabseName为数据库名称
--DatabseLogName为日志文件名,可以通过下面语句得到
--select name from sysfiles 
登录后复制

还有一种比较简单的方法是分离数据库,删除日志文件,再附加数据库,这样产生的日志文件只有500多k。


下面介绍几个常用的系统存储过程和函数

7 db_name() 得到数据库名称

select db_name()    
Test
(1 行受影响)
登录后复制

8 object_id 可以得到对象在系统中的编号,对象包括表、视图、存储过程等。如果不存在返回null,所以也可以用来判断表是否存在。

select object_id('objectname')
--判断表是否存在
if  object_id('tablename') is not null
登录后复制

9 sp_helptext 用来得到视图、存储过程等对象的文本,可以很快速找到,不过会改变视图或存储过程的格式。所以这个系统存储过程我通常都是用来查看,如果要修改一个存储过程我还是会通过树形菜单去找到存储过程然后修改保存。

sp_helptext 'objectname'
登录后复制

10 parsename,可以得到对象名称的指定部分,该函数有两个参数,第一个为对象名称,第二个为指定部分的代号。

select parsename('oec2003.databasename.dbo.tablename',1)    
--对象名称返回tablename
select parsename('oec2003.databasename.dbo.tablename',2)    
--Schema名称返回dbo
select parsename('oec2003.databasename.dbo.tablename',3)    
--数据库名称返回databasename
select parsename('oec2003.databasename.dbo.tablename',4)    
--服务器名称返回oec200
登录后复制

先就写这么多吧,后面整理出来的会陆续补上。

来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1

 | 本站CDN由 数掘科技 提供

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学