02
2013
08

SQL Server数据库可疑的解决办法

 

ALTER DATABASE ePipeMonitor SET EMERGENCY
ALTER DATABASE ePipeMonitor   SET SINGLE_USER
DBCC CheckDB (ePipeMonitor , REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE ePipeMonitor SET MULTI_USER

02
2013
08

SQL Server多行拼接成一个字符串

 DECLARE @STR VARCHAR(8000)  
SELECT @STR=ISNULL(@STR+',','')+code 
from  (select top 5 (code)  FROM  ModuleMenuList) AS T  
SELECT @STR  
go  

02
2013
08

聚集索引和非聚集索引的优、缺点

 

聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。建议使用聚集索引的场合为:
  a.此列包含有限数目的不同值;
  b.查询的结果返回一个区间的值;
  c.查询的结果返回某值相同的大量结果集。

02
2013
08

SQL Server中去除回车换行符

 

--去除回车 换行符 数据库
--换行符   CHAR(10)     
--回车   CHAR(13)    
SELECT *
FROM [dbo].[RenLi] WHERE replace(replace([name],char(10),''),char(13),'') like 'gs'

02
2013
08

SQL Server修改系统时间

 --修改系统时间
declare @aa nvarchar(50)
set @aa='date 01-01-2000'
EXEC master..xp_cmdshell @aa

 

02
2013
08

SQL Server存储过程中事务的应用

 

create proc test
(
 @name varchar(50)
)
as
declare @ret int
declare @err1 int
declare @err2 int

declare @trancount int
set @trancount = @@trancount
if @trancount = 0
begin tran
else
save tran proc_test

02
2013
08

SQL Server列转行

 

CREATE TABLE [Test] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[subject] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Source] [numeric](18, 0) NULL 
) ON [PRIMARY]
GO
INSERT INTO [test] ([name],[subject],[Source]) values (N'张三',N'语文',60)
INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'数学',70)
INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'英语',80)
INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'数学',75)
INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'语文',57)
INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'语文',80)
INSERT INTO [test] ([name],[subject],[Source]) values (N'张三',N'英语',100)
Go

02
2013
08

在SQL Server中取得操作系统文件的最后修改日期

 

 

/* 在SQL Server中取得操作系统文件的最后修改日期
  获取文件最后访问日期
  @filepath   文件路径,如:   c:\1.txt
  @filedate   文件最后访问日期

  调用示例:
  declare   @dt   varchar(20)
  exec   getFileLastAccessDate   'c:\1.txt',@dt   output
  select   @dt
*/
create   procedure   getFileLastAccessDate
  @filepath   varchar(4000),
  @filedate   varchar(20)   output
as
  declare   @obj   int,@file   int
  declare   @fileexists   varchar(10)
  exec   sp_oacreate   'Scripting.FileSystemObject',@obj   output
  exec   sp_oamethod   @obj,'FileExists',@fileexists   output,@filepath
  if   @fileexists='False'
  begin
    set   @filedate='文件不存在'
    return
  end
  exec   sp_oamethod   @obj,'GetFile',@file   output,@filepath
  exec   sp_oagetproperty   @file,'DateLastAccessed',@filedate   output
go
/*
  获取文件最后修改日期
  @filepath   文件路径,如:   c:\1.txt
  @filedate   文件最后修改日期

02
2013
08

SQLServer2005里对使用with encryption选项创建的存储过程解密

 

SQLServer2005里使用with encryption选项创建的存储过程仍然和sqlserver2000里一样,都是使用XOR进行了的加密。和2000不一样的是,在2005的系统表syscomments里已经查不到加密过的密文了。要查密文必须使用DAC(专用管理员连接)连接到数据库后,在系统表sys.sysobjvalues查询,该表的列imageval存储了相应的密文。具体可以使用下面的查询:

SELECT imageval FROM sys.sysobjvalues WHERE objid = object_id(@procedure) AND 
valclass = 1 AND subobjid = 1


下面是解密的存储过程,具体代码如下:

02
2013
08

SQL Server 创建链接服务器

 

--创建链接服务器
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
go