代码改变世界

随笔分类 -  数据库

SQL2000自动备份 删除

2012-12-12 16:32 by 假面Wilson, 280 阅读, 收藏, 编辑
摘要: 好久没用SQL2000,今天要为旧项目写个备份和删除数据的功能,代码如下declare@dbname varchar(20),@cmd1 nvarchar(120),@cmd2 varchar(120),@cmd3 varchar(120),@i int,@filename varchar(80),@path varchar(80)set @dbname='TEST'--\\这是数据库名,使用时只需要把它改成你所要备份的数据库名即可,这个必须修改\\------删除当前日期前15-前10天内的数据库备份,可根需要自行修改----set @i=10while @i<15be 阅读全文

文件自动增长和自动收缩

2012-12-05 11:45 by 假面Wilson, 567 阅读, 收藏, 编辑
摘要: SQL Server允许用户设置数据库初始值、最大值,可以自动增长或者自动收缩。通过这些设置,可以防止数据库空间问题而导致的应用程序修改失败或者SQL Server把硬盘空间耗尽之类的事情发生。一般来讲,如果数据库不是很繁忙,默认的设置(开启自动增长)能够满足大部分的需求。但是数据文件和日志文件增长本身是一件耗费系统资源和影响性能的工作。所以如果完全依赖SQL Server自动完成,可能会导致系统性能不够稳定。一个管理得比较精细的系统,应该预先考虑到可能的空间使用需求,提前规划并引导数据的流向。尽量避免空间用尽而使得SQL Server不得不自动增长的现象发生。同时也要确保每一次自动增长都能够 阅读全文

SqlServer2005备份模式与恢复模式

2012-12-04 16:30 by 假面Wilson, 278 阅读, 收藏, 编辑
摘要: 在SQL Server中,除了系统数据库外,你创建的每一个数据库都有三种可供选择的恢复模式: Simple(简单), full(完整), bulk-logged(批量日志)。 下面这条语句可以显示出所有在线数据库的恢复模式:SELECT name, (SELECT DATABASEPROPERTYEX(name, 'RECOVERY')) RecoveryModel FROM master..sysdatabases ORDER BY nameSQL Server 2005及以上版本也可以使用下面这条语句来查看:SELECT name, recovery_model_desc 阅读全文

SQL2005/2008 tempdb数据库路径的转移

2012-11-26 16:00 by 假面Wilson, 226 阅读, 收藏, 编辑
摘要: 完整步骤:停止与启动SQL服务方法:开始-->运行-->输入services.msc,回车-->在服务列表中找到SQL Server (MSSQLSERVER)-->右键-->停止/启动1.停止SQL服务2.复制 tempdb数据库的两个文件(.mdf/.ldf) 到新文件夹,如(D:/tempdb)3.启动SQL服务4.打开SQL Server Management Studio,执行以下代码: USEmaster;GOALTERDATABASEtempdbMODIFYFILE(NAME=tempdev, FILENAME='D:/tempdb/temp 阅读全文

SQL Server tempdb

2012-11-21 10:14 by 假面Wilson, 618 阅读, 收藏, 编辑
摘要: 最近数据库tempdb暴涨,上网查询了相关介绍,总结如下: tempdb全局存储内部对象,用户对象,临时表,临时对象,以及SQL Server操作创建的存储过程。每个数据库实例只有一个tempdb,所以可能存在性能以及磁盘空间瓶颈。各种形式的可用空间及过度饿DDL/DML操作都会导致tempdb负载过重。这会导致运行在服务器上不相干程序运行缓慢或者运行失败。 tempdb的一些常见通病如下: --耗完了tempdb的所有存储空间 --读取tempdb时的I/O瓶颈造成的查询运行缓慢。 --过度的DDL操作造成在系统表上的瓶颈。 --分配竞争 在我们开始诊断问题之前,让我们首先看一... 阅读全文

数据库设计的三大范式

2012-03-18 11:59 by 假面Wilson, 250 阅读, 收藏, 编辑
摘要: 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。在实际开发中最为常见的设计范式有三个:1.第一范式第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地. 阅读全文

存储过程与函数的区别

2012-03-18 11:50 by 假面Wilson, 299 阅读, 收藏, 编辑
摘要: Oracle中差别SQL SERVER中:本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。 函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少 1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。 2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。 3. 存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于... 阅读全文

数据库设计原则

2012-03-18 11:44 by 假面Wilson, 297 阅读, 收藏, 编辑
摘要: 1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。 这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。 〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。 这就是“一张原始单证对应多个实体”的典型例子。 2. 主键与外键 一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实... 阅读全文

sql server 2005中模仿merge的使用方法

2012-01-11 18:24 by 假面Wilson, 1739 阅读, 收藏, 编辑
摘要: sql server 2005中是不支持merge的用法的,sql server 2008和oracle中提供了支持,那么该如何模仿merge的用法呢,使用OUTPUT. 假设你有一个表permanent create table permanent(id int, d float, comment varchar(15))goinsert into permanent values(1, 10., ‘Original Row’)insert into permanent values(2, 10., ‘Original Row’)insert into permanent values... 阅读全文

SQL output语句的用法

2012-01-11 18:19 by 假面Wilson, 442 阅读, 收藏, 编辑
摘要: 以下示例将行插入test表,并使用 OUTPUT 子句将语句的结果返回到 @mytable table 变量中declare @mytable table( id int identity(1,1) primary key, name varchar(50))insert into test output inserted.name into @mytable values('147')select * from soloreztestselect * from @mytable结果是: output into子句是将向test表里面的数据同步的插入的@mytable的表变量里 阅读全文

SQL Server 2008 MERGE

2012-01-11 11:32 by 假面Wilson, 503 阅读, 收藏, 编辑
摘要: SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入、更新或删除操作。最典型的应用就是进行两个表的同步。 下面通过一个简单示例来演示MERGE语句的使用方法,假设数据库中有两个表Product及ProductNew,我们的任务是将Product的数据同步到ProductNew(当然同步可能是每天通过Job来自动完成的,在此我们只关注MERGE的使用)。 以下SQL创建示例表: --源表 CREATE TABLE Product ( ProductID varchar(7) NOT NULL PRIMARY KEY, ProductName v... 阅读全文

SQL中使用update inner join和delete inner join

2012-01-10 11:06 by 假面Wilson, 303 阅读, 收藏, 编辑
摘要: SQL中使用update inner join和delete inner join. Update Update XXX set XXX where 这种写法大家肯定都知道,才发现update和delete居然支持inner join的update方式,这个在表间关联来做更新和删除操作非常有用. 列子: Sql代码 update tb_User set pass='' from tb_User usr inner join tb_Address addr on usr.nAddressFK = addr.nAddressID where usr.id=123 ... 阅读全文

SQL2005 压缩日志文件

2011-12-09 21:54 by 假面Wilson, 553 阅读, 收藏, 编辑
摘要: 请按步骤进行,未进行前面的步骤,请不要做后面的步骤 否则可能损坏你的数据库. 一般不建议做第4,6两步 第4步不安全,有可能损坏数据库或丢失数据 第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复. --*/ 1.清空日志: DUMPTRANSACTIONflowerWITHNO_LOG 复制代码 2.截断事务日志: BACKUPLOGflowerWITHNO_LOG 复制代码 3.收缩数据库文件(如果不压缩,数据库的文件不会减小: 服务器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 --选择日志文件--在收缩操作里选择在释放... 阅读全文

SQL Server 自增字段归零

2011-10-18 16:39 by 假面Wilson, 436 阅读, 收藏, 编辑
摘要: SQL Server 2005表自增字段在多次插入数据后,自增的ID号比较混乱,而且删除数据后,自增的ID并不会归零,有两种方法可以控制自增的字段:方法一: 如果曾经的数据都不需要的话,可以直接清空所有数据,并将自增字段恢复从1开始计数 truncate table 表名方法二: dbcc checkident ('table_name', reseed, new_reseed_value) 当前值设置为 new_reseed_value。如果自创建表后没有将行插入该表,则在执行 DBCC CHECKIDENT 后插入的第一行将使用 new_reseed_value 作为标识。 阅读全文

索引填充因子

2011-10-11 18:02 by 假面Wilson, 448 阅读, 收藏, 编辑
摘要: 索引填充因子在创建聚集索引和非聚集索引时,表中的数据按照索引列中的值的顺序存储在数据库的数据页中。在表中插入新的数据行或更改索引列中的值时, SQL Server 2000 可能必须重新组织表中的数据存储,以便为新行腾出空间,保持数据的有序存储。向一个已满的索引页添加某个新行时,SQL Server 把大约一半的行移到新页中以便为新行腾出空间。这种重组称为页拆分。页拆分会降低性能并使表中的数据存储产生碎片。 创建索引时,可以指定一个填充因子,以便在索引的每个叶级页上留出额外的间隙和保留一定百分比的空间,供将来表的数据存储容量进行扩充和减少页拆分的可能性。填充因子的值是从 0 到 10... 阅读全文

清除SQLSERVER查询缓存

2011-09-15 11:07 by 假面Wilson, 1298 阅读, 收藏, 编辑
摘要: 我们在测试运行效率时,会发现第二次及以后所得到结果的时间比第一次远远短很多,这是由于SQLSERVER的缓存机制引起的。执行以下语句以清除缓存数据: DBCC FREEPROCCACHEDBCC DROPCLEANBUFFERS 阅读全文

浅谈MS-SQL锁机制

2011-08-31 12:29 by 假面Wilson, 195 阅读, 收藏, 编辑
摘要: 转自:http://study.99net.net/study/database/mssql/1085625420.html锁的概述一. 为什么要引入锁多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统脏读A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致不可重复读A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致并发控制的主要方法是封锁,锁就是在一段时间 阅读全文

SET IDENTITY_INSERT [Table] [ON|OFF]

2011-08-26 14:09 by 假面Wilson, 372 阅读, 收藏, 编辑
摘要: SET IDENTITY_INSERT [Table] ON 时表示暂时可以不用自增长可以收到插入数据,到不能有重复。需要特别注意的时,必须在insert into table 后边指定字段,或者会报"can only be specified when a column list is used and IDENTITY_INSERT is ON" !SET IDENTITY_INSERT [Table] OFF时表示恢复自增长。 阅读全文

SQL Server DATEPART() 函数

2011-08-24 09:50 by 假面Wilson, 214 阅读, 收藏, 编辑
摘要: 定义和用法DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。语法DATEPART(datepart,date)date参数是合法的日期表达式。datepart参数可以是下列的值:datepart缩写年yy, yyyy季度qq, q月mm, m年中的日dy, y日dd, d周wk, ww星期dw, w小时hh分钟mi, n秒ss, s毫秒ms微妙mcs纳秒ns 阅读全文

常用的SQL语句对数据库进行操作

2011-07-19 15:03 by 假面Wilson, 397 阅读, 收藏, 编辑
摘要: 1.增加字段 alter table docdsp add dspcodechar(200) 2.删除字段 ALTER TABLE table_NAME DROP COLUMN column_NAME 3.修改字段类型 ALTER TABLE table_name ALTER COLUMN column_name new_data_type ... 阅读全文