数据库 类目

关系型数据库。

断掉 指定数据库的 当前链接

评分 0.00, 满分 5星 0 票 No comments

断掉 当前链接 数据库的 链接,便于恢复数据库。

--终结 数据库连接
--2009-04-18 Edit by Xing
--断掉 当前链接 数据库的 链接,便于恢复数据库。
--

  Use   Master   
    
  Create   Table   #aa(spid   int,ecid   int,status   varchar(300),loginname   varchar(100),hostname   varchar(200),blk   int   ,dbname   varchar(30),cmd   varchar(100),request_id   int)   
  Insert   Into   #aa   Exec   sp_who   
  Declare   tt   Cursor   for   Select   spid   From   #aa   Where   spid>50   and   dbname='DATANAME'   ----dbname   是你的数据库名字   
  Open   tt   
  Declare   @ActiveUserId   Int,@KillString   Varchar(100)   
  Fetch   Next   From   tt   Into   @ActiveUserId   
  While(@@Fetch_Status=0)   
  Begin   
      Set   @KillString='Kill   '+Convert(Varchar(50),@ActiveUserId)   
      Exec(@KillString)   
      Fetch   Next   From   tt   Into   @ActiveUserId   
  End   
  Drop   Table   #aa   
  Close   tt   
  Deallocate   tt 

SQL安全设置攻略

评分 0.00, 满分 5星 0 票 2 comments

下面的文章对于我们对SQL安全设置会有很大的帮助(转)
日前SQL INJECTION的攻击测试愈演愈烈,很多大型的网站和论坛都相继被注入。这些网站一般使用的多为SQLSERVER数据库,正因为如此,很多人开始怀疑SQL SERVER的安全性。其实SQL SERVER2000已经通过了美国政府的C2级安全认证-这是该行业所能拥有的最高认证级别,所以使用SQLSERVER还是相当的安全的。当然和ORCAL、DB2等还是有差距,但是SQL
SERVER的易用性和广泛性还是能成为我们继续使用下去的理由。那怎么样才能使SQL SERVER的设置让人使用的放心呢? Read more…

编写SQL Server 2005 PIVOT查询

评分 0.00, 满分 5星 0 票 No comments

PIVOT是新引入SQL Server 2005的运算符,它让你能够将行级数据旋转成为列表数据,而不需要像先前版本的SQL Server一样使用CASE语句。

CASE语句查询

对于数据库开发人员来说,将行级数据转换为列级数据并不是什么新东西。在SQL Server以前的版本里,要获得所需要的跨表格数据集就要用到一系列CASE语句和聚合查询。虽然这种方式让开发人员具有了对所返回数据进行高度控制的能力,但是编写出这些查询是一件很麻烦的事情。

为了看一下这些CASE语句是如何使用的。我们需要一些测试数据。运行列表A里的脚本能够创建一个SalesHistory表格并把数据加载到表格里。

现在我可以编写一个基于CASE语句的PIVOT查询。这个查询的目标是按照年份将每件产品的销售状况集中起来,这些产品包括:BigScreen、PoolTable和Computer。每件产品自己的销售数据都放在专用的列里。列表B里是CASE语句查询的脚本。

这个查询虽然很简单,相对容易编写,但是很繁复。你必须明确地为每个想要转换成列表数据的行输入一个CASE语句,这一点意思都没有。如果有个程序能够帮你自动完成这项任务就好了——这就是PIVOT运算符的作用之所在。

PIVOT

由于SQL Server 2005有了新的PIVOT运算符,就不再需要CASE语句和GROUP BY语句了。(每个PIVOT查询都涉及某种类型的聚合,因此你可以忽略GROUP BY语句。)PIVOT运算符让我们能够利用CASE语句查询实现相同的功能,但是你可以用更少的代码就实现,而且看起来更漂亮。列表C是一个示例PIVOT查询,它模仿的是我们的CASE语句查询。

这个查询的关键部分是PIVOT运算符后面的括号。在括号里面,我们使用一个SUM聚合函数计算用FOR Product IN()语句列出的每个Product的SalePrice总和。这个语句可能看起来有点别扭,因为IN()语句的值没有放在(’)符号里,它们是文本值。这些值事实上被当作ColumnNames对待,它们在最终的结果集里被转换成列表字段。

如果你运行这个查询,得到的结果与我们从CASE语句查询获得的结果类似。但两者的一个重要不同之处是,这个查询仍然会为我们表格里列出的每个行返回一个行,这当然是不能令人满意的;我们希望获得一个直观的表格列表,列出每年的销售量。造成这种情况的问题在于我们一开始编写PIVOT查询的方式。

在这个查询的SELECT语句中,我们只是在SalesHistory列表里简单地列出了年,并为每个产品设定了一个字段。因此问题在于处理PIVOT语句的SELECT语句无法确定在PIVOT语句里要使用哪一个列。PIVOT语句将分组应用到了所有的列,后者既不是旋转字段也不是聚合字段。我们可以使用子查询来实现满意的结果。列表D是编写好的查询。这一小小的改动让我们能够用更少代码模拟CASE语句查询。

不足之处

PIVOT运算符在很多情况下都很有用,然而它还有一些不足之处。PIVOT运算符所提供的很多功能都要求你对旋转成为列级数据的字段进行“硬编码”。你可以利用动态TSQL语句编写PIVOT查询来解决这一问题,但是这还不是最理想的解决办法。

使用PIVOT语句的另外一个潜在问题是你或许只能在结果集里聚合一个字段;而你利用CASE语句查询可以聚合任意多的字段。

虽然这些潜在不足之处似乎可能成为阻碍使用新PIVOT运算符的障碍,但是它在TSQL开发人员的工具箱里还是占有一席之地。

SQL Server日期格式的转换

评分 0.00, 满分 5星 0 票 No comments

SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm

例如:

select getdate()

2004-09-12 11:06:08.177

这对于在要不同数据库间转移数据或者习惯oracle日期格式YYYY-MM-DD HH24:MI:SS的人多少有些不方便.

SQL Server里面可能经常会用到的日期格式转换方法:

举例如下:

select CONVERT(varchar, getdate(), 120 )
2004-09-12 11:06:08

select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),’-‘,”),’ ‘,”),’:’,”)
20040912110608

select CONVERT(varchar(12) , getdate(), 111 )
2004/09/12

select CONVERT(varchar(12) , getdate(), 112 )
20040912

select CONVERT(varchar(12) , getdate(), 102 )
2004.09.12

不常用的日期格式转换方法:

select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004

select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004

select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004

select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004

select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004

select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004

select CONVERT(varchar(12) , getdate(), 108 )
11:06:08

select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1

select CONVERT(varchar(12) , getdate(), 110 )
09-12-2004

select CONVERT(varchar(12) , getdate(), 113 )
12 09 2004 1

select CONVERT(varchar(12) , getdate(), 114 )
11:06:08.177

用sql语句生成SQLserver(MSSQL)数据字典

评分 0.00, 满分 5星 0 票 No comments
--显示表结构sql语句SQL Server 2000----------------------1

SELECT
表名=case when a.colorder=1 then d.name else '' end,
表说明=case when a.colorder=1 then isnull(f.value,'') else '' end,
字段序号=a.colorder,
字段名=a.name,
标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
))) then '√' else '' end,
类型=b.name,
占用字节数=a.length,
长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),
小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
允许空=case when a.isnullable=1 then '√'else '' end,
默认值=isnull(e.text,''),
字段说明=isnull(g.[value],'')
FROM syscolumns a
left join systypes b on a.xusertype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sysproperties g on a.id=g.id and a.colid=g.smallid
left join sysproperties f on d.id=f.id and f.smallid=0
--where d.name='要查询的表' --如果只查询指定表,加上此条件
order by a.id,a.colorder

--SQL Server 2000----------------------2         

SELECT
          (case when a.colorder=1 then d.name else '' end)表名,
          a.colorder 字段序号,
          a.name 字段名,
          (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end)
标识,
          (case when (SELECT count(*)
          FROM sysobjects
          WHERE (name in
                    (SELECT name
                   FROM sysindexes
                   WHERE (id = a.id) AND (indid in
                             (SELECT indid
                            FROM sysindexkeys
                            WHERE (id = a.id) AND (colid in
                                      (SELECT colid
                                     FROM syscolumns
                                     WHERE (id = a.id) AND (name = a.name))))))) AND
                 (xtype = 'PK'))>0 then '√' else '' end) 主键,
          b.name 类型,
          a.length 占用字节数,
          COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度,
          isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数,
          (case when a.isnullable=1 then '√'else '' end) 允许空,
          isnull(e.text,'') 默认值,
          isnull(g.[value],'') AS 字段说明
FROM     syscolumns     a left join systypes b
on     a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id     and     d.xtype='U' and     .name<>'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sysproperties g
on a.id=g.id AND a.colid = g.smallid
order by a.id,a.colorder

SQL Server 2005--------------------------------------------------------------------------------

SELECT
         (case when a.colorder=1 then d.name else '' end)表名,
         a.colorder 字段序号,
         a.name 字段名,
         (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识,
         (case when (SELECT count(*)
         FROM sysobjects
         WHERE (name in
                   (SELECT name
                  FROM sysindexes
                  WHERE (id = a.id) AND (indid in
                            (SELECT indid
                             FROM sysindexkeys
                           WHERE (id = a.id) AND (colid in
                                     (SELECT colid
                                    FROM syscolumns
                                    WHERE (id = a.id) AND (name = a.name))))))) AND
                (xtype = 'PK'))>0 then '√' else '' end) 主键,
         b.name 类型,
         a.length 占用字节数,
         COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度,
         isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数,
         (case when a.isnullable=1 then '√'else '' end) 允许空,
         isnull(e.text,'') 默认值,
         isnull(g.[value],'') AS 字段说明
FROM    syscolumns    a left join systypes b
on    a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id    and    d.xtype='U' and    d.name<>'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sys.extended_properties g --2005相应的修改
on a.id=g.major_id AND a.colid = g.major_id --2005相应的修改
where d.name='D3'
order by a.id,a.colorder