随笔分类 -  mssql

摘要:SqlServer中一个非常强大的日期格式化函数常用:SelectCONVERT(varchar(100),GETDATE(),23):2006-05-16SelectCONVERT(varchar(100),GETDATE(),0):0516200610:57AMSelectCONVERT(varchar(100),GETDATE(),1):05/16/06SelectCONVERT(varchar(100),GETDATE(),2):06.05.16SelectCONVERT(varchar(100),GETDATE(),3):16/05/06SelectCONVERT(varchar(1 阅读全文
posted @ 2011-07-04 09:42 qanholas 阅读(51790) 评论(2) 推荐(0) 编辑
摘要:步骤如下:1.需要启动服务SqlServerAgent(sqlserver代理)2.新建作业,名称为backupDatabase3.选择步骤,点击“新建”,输入步骤名称,选择需要备份的数据库,然后再命令中写上:DECLARE@data_agoNVARCHAR(50)DECLARE@cmdVARCHAR(50)SET@data_ago='D:\bak\'+'backupname'+CONVERT(CHAR(8),GETDATE()-15,112)+'.bak'SET@cmd='del'+@data_agoEXECMASTER..xp 阅读全文
posted @ 2011-07-04 09:38 qanholas 阅读(519) 评论(0) 推荐(0) 编辑
摘要:SQLServer数据库提供了修复命令DBCC,当SQLServer数据库遭到质疑或者是有的无法完成读取时可以尝试用此命令来修复。以下是一些常见的DBCC修复命令,希望会给读者带来帮助。1.DBCCCHECKDB重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复,修复数据库存在的一致性错误与分配错误。usemasterdeclare@databasenamevarchar(255)set@databasename=’需要修复的数据库实体的名称’execsp_dboption@databasename,N’single’,N’true’–将目标数据库置为 阅读全文
posted @ 2011-07-04 09:28 qanholas 阅读(485) 评论(1) 推荐(0) 编辑
摘要:DECLARE @proc_text VARCHAR (MAX) DECLARE get_proc_text_cursor CURSOR FOR SELECT 'if object_id(N''' + [name] + ''') is not null drop proc ' + [name] + CHAR(10) + CHAR(13) + ' GO ' + CHAR(10) + CHAR(13) + ltrim(definition) + CHAR(10) + CHAR(13) + ' GO' F 阅读全文
posted @ 2011-07-04 09:17 qanholas 阅读(322) 评论(0) 推荐(0) 编辑
摘要:公司的系统上线以后出了很多问题,其中一个就是 deadlock 的出现,这个问题我以前一直不是很重视,因为我知道在Sql2005 中死锁是会自动解决的,一旦监视器检测到这种循环依赖关系,将自动的选择其中一个任务作为牺牲品,然后终止其事务并提示错误。这样,其他任务就可以完成其事务。不过这样一来其中一个肯定是要重新做了,这对用户来说有时候会觉得莫名其妙,总认为我们的系统有问题。于是我查看了一下联机帮助,在网上搜索了一番,终于用 Sql2005 的新特性 TRY/CATCH 解决了这样一个让用户不满意的事情。在我们操作数据库的时候,特别是在高并发的事务中,死锁的出现不可避免。在网上我也看到很多高人写 阅读全文
posted @ 2011-07-01 14:39 qanholas 阅读(4355) 评论(0) 推荐(0) 编辑
摘要:alter database k2 set single_user with rollback immediatealter database k2 set multi_useralter database k2 collate Chinese_Taiwan_Stroke_CI_ASALTER TABLE tbALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CI_AS 阅读全文
posted @ 2011-06-26 14:42 qanholas 阅读(197) 评论(0) 推荐(0) 编辑
摘要:DECLARE @index TABLE(index_name nVARCHAR(max),index_des nVARCHAR(max),index_keys nVARCHAR(max))INSERT INTO @index( index_name, index_des, index_keys)EXEC sp_helpindex 'ycmis.dbo.费用表'--游标模版DECLARE @indexname NVARCHAR(200) DECLARE pcurr CURSOR FOR SELECT index_name FROM @indexOPEN pcurrFETCH N 阅读全文
posted @ 2011-06-25 19:29 qanholas 阅读(441) 评论(0) 推荐(0) 编辑
摘要:sp_fulltext_database 'ENABLE'CREATE FULLTEXT CATALOG FT_Catalog IN PATH 'E:\DB\'AS DEFAULT;/*消息 1833,级别 16,状态 3,第 1 行只有执行了下一个 BACKUP LOG 操作后,才能再次使用文件 'sysft_FT_Catalog'。backup log K2_Org to disk='d:\1.log'*/CREATE FUllTEXT INDEX ON dbo.ProcSummary( SummaryText ,Summar 阅读全文
posted @ 2011-06-23 22:40 qanholas 阅读(574) 评论(0) 推荐(0) 编辑
摘要:if serverproperty('servername') <> @@servername begin declare @server sysname set @server = @@servername exec sp_dropserver @server = @server set @server = cast(serverproperty('servername') as sysname) exec sp_addserver @server = @server , @local = 'LOCAL' end 阅读全文
posted @ 2011-06-20 13:55 qanholas 阅读(171) 评论(0) 推荐(0) 编辑
摘要:相同点:truncate和不带where子句的delete,以及drop都会删除表内的数据不同点:1. truncate和delete只删除数据不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。2. delete语句是数据库操作语言(dml),这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发。truncate、drop是数据库定义语言(ddl),操作立即生效,原数据不放到rollb 阅读全文
posted @ 2011-06-19 20:33 qanholas 阅读(381) 评论(0) 推荐(0) 编辑
摘要:通常DBA在监控和优化SQL Server数据库DBA,都想利用命令行工具。其中经常要做的一件事情,就是收集服务器性能数据,包括CPU ,内存和磁盘利用率以及SQL Server特定数据。这时你就可以利用TypePerf.exe这个命令行工具来帮你捕获这些性能数据。 TypePerf.exe是一个命令行工具,包括把Windows操作系统的性能计数器数据输出到命令窗口或写入到支持该功能的日志文件格式中。 Windows操作系统以对象及其相关联的计数器的形式,提供了非常多的性能数据。例如, SQL Server提供了sqlserver统计对象的详细报告,包括了登录、注销、数据库连接等信息; 有些对 阅读全文
posted @ 2011-06-18 23:11 qanholas 阅读(2259) 评论(0) 推荐(0) 编辑
摘要:DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR); 阅读全文
posted @ 2011-06-18 15:34 qanholas 阅读(150) 评论(0) 推荐(0) 编辑
摘要:select 'H00088' as 工号, '张家栋' as 姓名, '2011-06-01' as 开始日期 , '2011-06-16' as 结束日期, 0 as 总工时 , '休息天数:3天' as 记事 into #t union select 'H00088', '张家栋', '2011-06-01', '2011-06-16', 38.1 ,'异常天数:9天' unionselect 'H00088' , 阅读全文
posted @ 2011-06-16 15:33 qanholas 阅读(326) 评论(0) 推荐(1) 编辑
摘要:DECLARE @dbname VARCHAR(60)SELECT @dbname = CONVERT(VARCHAR(60), DB_NAME())EXEC('DUMP TRANSACTION ['+@dbname+'] WITH NO_LOG') DECLARE @logname VARCHAR(60) SELECT @logname = name FROM sys.sysfiles WHERE name LIKE '%log' EXEC('BACKUP LOG ['+@dbname+'] WITH NO_LOG 阅读全文
posted @ 2011-06-15 21:56 qanholas 阅读(209) 评论(0) 推荐(0) 编辑
摘要:1.0(3),2.0(4),3.5(5),3.5111(78),55.98(23345)12.0(2),3.5(5)4567.0(344),234.43(2323),3.5(5),3.5111(78),55.98(23345)1307155.4658041.500003422773.35580create function toolkindvalues(@str varchar(8000) )returns decimal(18,5)as begindeclare @result decimal(18,5)set @result=0declare @charindex int set @cha 阅读全文
posted @ 2011-06-15 20:38 qanholas 阅读(308) 评论(0) 推荐(1) 编辑
摘要:函数中不能用exec,改存储过程吧. 未在下面的列表中列出的语句不能用在函数主体中。 赋值语句。 控制流语句。 DECLARE 语句,该语句定义函数局部的数据变量和游标。 SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。 游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。 INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。 EXECUTE 语句调用扩展存储过程。 阅读全文
posted @ 2011-06-15 11:35 qanholas 阅读(316) 评论(0) 推荐(0) 编辑
摘要:----DROP TABLE #t--SELECT ROW_NUMBER ( ) OVER( PARTITION BY tid ORDER BY tablename ) cid,* --into #t --FROM--(--SELECT TOP 100 PERCENT DENSE_RANK ( ) OVER( ORDER BY a.name ) tid,-- a.name AS tablename,-- d.name AS columnname,-- d.cname AS type --FROM sysobjects a-- JOIN (SELECT c.name AS cname,b.* F 阅读全文
posted @ 2011-06-14 14:29 qanholas 阅读(324) 评论(0) 推荐(0) 编辑
摘要:相对于传统的循环和游标方式生成数据,"GO n"方式更加简洁。虽然效率低下,但是也不失为一种方法(更高效的可以用row_number+sys.all_columns方式)。view sourceprint?-- 创建测试表use tempdbgo CREATE TABLE [dbo].[Tally]( [N] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_Tally] PRIMARY KEY CLUSTERED( [N] ASC)) ON [PRIMARY] -- 设置环境SET NOCOUNT ONGOSET IDENTITY_ 阅读全文
posted @ 2011-06-12 11:57 qanholas 阅读(379) 评论(0) 推荐(0) 编辑
摘要:create proc p_helpindex @tbname sysname ='' ,@type char(1) = '1'as--生成索引信息及索引创建脚本 --author : perfectaction--@tbname 表名,空返回所有表索引--@type 是否显示聚集索引,1显示聚集索引,2不显示聚集索引--调用:p_helpindex 'dbo.customers','1'with t as (select rank() over (order by b.name,a.name,c.name) as id,c.in 阅读全文
posted @ 2011-06-11 18:18 qanholas 阅读(382) 评论(0) 推荐(0) 编辑
摘要:今天遇到这样一个细节问题,有个同事为了提高SQL执行效率使用sysindexes.rows来快速的计算表的行数结果发现取出来的行数根本就不是实际表中的行数就好比这样为了获得表中的记录数,一般都使用下面的SQL语句: SELECT COUNT(*) FROM dbo.orders但这条语句会执行全表扫描才能获得行数。 下面的SQL语句不会执行全表扫描一样可以获得行数:SELECT rows FROM sysindexes WHERE id = OBJECT_ID('表名') AND indid < 2网上很多优化文章都推荐这种做法,无可厚非,这种计算 sysindexes 阅读全文
posted @ 2011-06-09 16:24 qanholas 阅读(428) 评论(0) 推荐(0) 编辑