Archive for the '数据库|SQLServer' Category

Microsoft SQL Server与Sybase内在区别

  Microsoft SQL Server与Sybase的内在区别:
  1.Sybase没有用户自定义函数。
  2.判断fetch成功的全局变量是@@sqlstatus,而不是@@fetch_status。
  3.没有set,赋值与查询通用select。
  4.没有top,返回N行要使用set rowcount N / set rowcount 0
  5.raiserror 22009 ” “–> raiserror( ‘ ‘,16,1)
  6.游标一定要在过程中使用,不能单独在查询中使用。
  7.销毁游标要加cursor关键字.如:deallocate cursor cur_tmp
  8.没有bigint类型。
  9.create table #t(id numeric(12,0) identity not null),不支持int型,且不能设置起始值和步进值。
  10.不能alter一个存储过程,要先drop掉再create。
  11.没有len函数,使用char_length或datalength等效。
  12.通过sysindexes中的doampg列可返回某表的行数,rowcnt(doampg) 。
  13.convert函数没有120格式(yyyy-mm-dd hh:mm:ss),需要使用select convert(char(4),datepart(year,getdate()))+ ‘- ‘+right( ‘0 ‘+convert(varchar(2),datepart(month,getdate())),2)+ ‘- ‘+right( ‘0 ‘+convert(varchar(2),datepart(day,getdate())),2)+ ‘ ‘+convert(char(10),getdate(),8)
  14.charindex不能从被查找字符串中按指定位置查找某字符串。
  15.不能使用rtrim函数将数值型转为字符型。
  16.没有cast函数,数值型到字符型转移使用select convert(varchar(10),123)
  17.没有replace函数。
  18.没有left函数,只有right函数。
  19.不支持在字段上加[]。
  20.select语句中不支持变量累加,例如:select @sql=@sql+colname from tablename
  21.在过程及视图中系统会自动将select * 变为select 列1,列2…
  22.varchar最大支持16384个字节(SQLServer中是8000) 。
  23.Sybase不支持表变量。
  24.Sybase不支持instead of触发器。
  25.Sybase没有调度(注:定时执行某个操作) 。

(转)Microsoft SQL Server与Sybase内在区别

  Microsoft SQL Server与Sybase的内在区别:
  1.Sybase没有用户自定义函数。
  2.判断fetch成功的全局变量是@@sqlstatus,而不是@@fetch_status。
  3.没有set,赋值与查询通用select。
  4.没有top,返回N行要使用set rowcount N / set rowcount 0
  5.raiserror 22009 " "–> raiserror( ‘ ‘,16,1)
  6.游标一定要在过程中使用,不能单独在查询中使用。
  7.销毁游标要加cursor关键字.如:deallocate cursor cur_tmp
  8.没有bigint类型。
  9.create table #t(id numeric(12,0) identity not null),不支持int型,且不能设置起始值和步进值。
  10.不能alter一个存储过程,要先drop掉再create。
  11.没有len函数,使用char_length或datalength等效。
  12.通过sysindexes中的doampg列可返回某表的行数,rowcnt(doampg) 。
  13.convert函数没有120格式(yyyy-mm-dd hh:mm:ss),需要使用select convert(char(4),datepart(year,getdate()))+ ‘- ‘+right( ‘0 ‘+convert(varchar(2),datepart(month,getdate())),2)+ ‘- ‘+right( ‘0 ‘+convert(varchar(2),datepart(day,getdate())),2)+ ‘ ‘+convert(char(10),getdate(),8)
  14.charindex不能从被查找字符串中按指定位置查找某字符串。
  15.不能使用rtrim函数将数值型转为字符型。
  16.没有cast函数,数值型到字符型转移使用select convert(varchar(10),123)
  17.没有replace函数。
  18.没有left函数,只有right函数。 [...]

SQL Server 2005关于数据类型最大值

事情开始得很简单。MegaWare公司市场部门想要一个新的网站来发布文档,开发 团队觉得使用SQL Server 2000数据库作为文档存储仓库会使事情变得简单。Steve是MegaWare的数据库管理员,没有看出这有什么大问题;在数据库中存储文档,而不是使 用文件系统,意味着服务器需要多做一些工作,但是它也会使得备份和管理容易得多。数据库与文件系统变得不同步也应该是不可能的。
  市 场部门想要存储的许多文档都超过了8000个字节,那么很明显VARCHAR不是适合这项工作的数据类型。作为替代,TEXT数据类型被用来定义存放数据 的字段。因为每个TEXT都能容纳2GB的内容,TEXT要存放市场部门的同事们扔进数据库的最大的文件也是没有问题的。
  数月过去了,市场用大量的无聊拷贝填满了整个数据库。但是这还不是Steve真正关心的问题。数据库愉快地嗡嗡作响地运转着,每个人对项目的结果都很满意。
   直到公司的标语改变的那个重大的日子。市场部的团队认为“MegaWare: It’s really cool!”要比原来的“It’s MegaWare’s Way or the Highway!” 听起来更好。因为市场部团队已经将原来的标语嵌入了仓库中每个文档的页脚上,现在Steve的工作就是更改所有这些文档的页脚。
  “没有问题,” Steve想,打开SQL Server 查询分析器工具,执行了如下的T-SQL批处理:
  UPDATE MarketingDocuments
  SET Document =
  REPLACE(Document,
  ’It’’s MegaWare’’s Way or the Highway!’,
  ’MegaWare: It’’s really cool!)
  当他看到出现的错误消息的时候,Steve的轻松的微笑很快消失了,“替换函数的参数1,text数据类型无效。”
   替换函数在编写出来的时候,就对TEXT数据类型不起作用。同样也对CHARINDEX或者SUBSTRING不起作用??或者至少是他们在超过8千个 字符的情况下不起作用。更进一步地讲,开发人员忘了处理TEXT或者IMAGE类型的本地变量;实际上不支持任何操作。即使是简单地更新一个文档中的一个 子字符串都需要用到晦涩的东西,以及难以使用的类似READTEXT和WRITETEXT的函数。而不是开发人员或者忙碌的数据库管理员因为想要弄清如何 正确使用而采用了不同类型的函数消耗了时间。
  SQL Server的开发人员很幸运,他们将会拨开乌云见蓝天。SQL Server 2005引入了一系列新的被称为MAX的数据类型。这是VARCHAR,NVARCHAR和VARBINARY类型的扩展,这几种类型以前被限制在 8000字节以下。MAX可以容纳高达2GB的数据,与TEXT和IMAGE一样??并且完全兼容所有的SQL Server内置的字符串函数。
  用MAX关键字定义一个某种MAX类型的变量与替代字符串的尺寸(为VARCHAR/NVARCHAR的时候)或者字节(为VARBINARY的时候)一样简单。
  DECLARE @BigString VARCHAR(MAX)
  SET @BigString = ‘abc’

  虽然这个变量可以自由地操纵,并且可以传递给任何的内置的字符串函数,兼容性仍然不是没有问题。首先,开发人员不能期望指定了尺寸的VARCHAR和VARBINARY变量在达到8000个字节的极限的时候可以自动“升级”到MAX版本。例如,如下的批处理:
  DECLARE @String1 VARCHAR(4001)
  DECLARE @String2 VARCHAR(4001)
  SET @String1 = REPLICATE(’1′, 4001)
  SET @String2 = [...]

(转)SQL Server 2005对海量数据处理

超大型数据库的大小常常达到数百GB,有时甚至要用TB来计算。而单表的数据量往往会达到上亿的记录,并且记录数会随着时间而增长。这不但影响着数 据库的运行效率,也增大数据库的维护难度。除了表的数据量外,对表不同的访问模式也可能会影响性能和可用性。这些问题都可以通过对大表进行合理分区得到很 大的改善。当表和索引变得非常大时,分区可以将数据分为更小、更容易管理的部分来提高系统的运行效率。如果系统有多个CPU或是多个磁盘子系统,可以通过 并行操作获得更好的性能。所以对大表进行分区是处理海量数据的一种十分高效的方法。本文通过一个具体实例,介绍如何创建和修改分区表,以及如何查看分区 表。
  1 SQL Server 2005
  SQL Server 2005是微软在推出SQL Server 2000后时隔五年推出的一个数据库平台,它的数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和 高性能的数据应用程序。此外SQL Server 2005结合了分析、报表、集成和通知功能。这使企业可以构建和部署经济有效的BI解决方案,帮助团队通过记分卡、Dashboard、Web Services和移动设备将数据应用推向业务的各个领域。无论是开发人员、数据库管理员、信息工作者还是决策者,SQL Server 2005都可以提供出创新的解决方案,并可从数据中获得更多的益处。
  它所带来的新特性,如T-SQL的增强、数据分区、服务代理和与.Net Framework的集成等,在易管理性、可用性、可伸缩性和安全性等方面都有很大的增强。
  2 表分区的具体实现方法
  表分区分为水平分区和垂直分区。水平分区将表分为多个表。每个表包含的列数相同,但是行更少。例如,可以将一个包含十亿行的表水平分区成 12 个表,每个小表表示特定年份内一个月的数据。任何需要特定月份数据的查询只需引用相应月份的表。而垂直分区则是将原始表分成多个只包含较少列的表。水平分 区是最常用分区方式,本文以水平分区来介绍具体实现方法。
  水平分区常用的方法是根据时期和使用对数据进行水平分区。例如本文例子,一个短信发送记录表包含最近一年的数据,但是只定期访问本季度的数据。在这种情况下,可考虑将数据分成四个区,每个区只包含一个季度的数据。
  2.1 创建文件组
  建立分区表先要创建文件组,而创建多个文件组主要是为了获得好的 I/O 平衡。一般情况下,文件组数最好与分区数相同,并且这些文件组通常位于不同的磁盘上。每个文件组可以由一个或多个文件构成,而每个分区必须映射到一个文件 组。一个文件组可以由多个分区使用。为了更好地管理数据(例如,为了获得更精确的备份控制),对分区表应进行设计,以便只有相关数据或逻辑分组的数据位于 同一个文件组中。使用 ALTER DATABASE,添加逻辑文件组名:
  ALTER DATABASE [DeanDB] ADD FILEGROUP [FG1]
  DeanDB为数据库名称,FG1文件组名。创建文件组后,再使用 ALTER DATABASE 将文件添加到该文件组中:
  ALTER DATABASE [DeanDB] ADD FILE ( NAME = N’FG1′, FILENAME = N’C:DeanDataFG1.ndf’ , SIZE = 3072KB , FILEGROWTH [...]

SQL语句大全

*************导出到Access********************/
insert into openrowset(’Microsoft.Jet.OLEDB.4.0′,
   ‘x:\A.mdb’;’admin’;”,A表) select * from 数据库名..B表
/*************导入Access********************/
insert into B表 selet * from openrowset(’Microsoft.Jet.OLEDB.4.0′,
   ‘x:\A.mdb’;’admin’;”,A表)

insert into userxx SELECT *
FROM OPENROWSET(’Microsoft.Jet.OLEDB.4.0′,
‘c:\hao.mdb’;’admin’;”
,[user]) 将hao.mdb的user数据插入到已经存在的userxx表中

SELECT * into userxx
FROM OPENROWSET(’Microsoft.Jet.OLEDB.4.0′,
‘c:\hao.mdb’;’admin’;”
,[user]) 将user列数据新建一个userxx的表放在里面

select * into [d].[dbo].[config] from [BFTQ2007].[dbo].[config]

SELECT name,domurl,content FROM [movmdb].[dbo].[learning] where title=’好奇害死猫’
SELECT photoname,synopsis FROM [...]

(转)各主要数据库的连接串

各主要数据库的连接串
将连接方式分为两大类,一类是OLEDB方式,一类是ODBC方式。收集了一段时间,整理出来,欢迎补充和修正。谢谢。
ADO.NET方式的连接与ADO类似,这里不加整理。
数据库连接串:
****A.OLEDB方式:
1.Oracle
标准连接(Standard Security):
[...]

SQL一列转换成一行!

一列转换成一行!
表1内容为   
    cright   
    |2|5|6|7|   
    |1|2|3|4|5|6|7|   
    |5|6|7|8|   
    
    想得到表2   
    
    r1                                   r2                                               r3   
    |2|5|6|7|                   |1|2|3|4|5|6|7|                     |5|6|7|8|   
    
    请问如何转换?  

create     table     A   
    (   
        cright     varchar(20)   
    )   
    insert     A   
    select     ‘|2|5|6|7|’     union   
    select     ‘|1|2|3|4|5|6|7|’     union   
    select     ‘|5|6|7|8|’   
    
    –查询   
    declare     @str     varchar(8000),@sql     varchar(8000),@i     int   
    select     @str=isnull(@str,”)+’,”’+cright+””     from     A     
    select     @sql=”,@i=1   
    while     @i<=(select     count(1)     from     A)   
    begin   
              select     @sql=@sql+’,[r'+convert(varchar,@i)+']     varchar(20)’   
                            ,@i=@i+1   
    end   
    select     @sql=’     create     [...]

比较两个数据库的表结构差异

/*–比较两个数据库的表结构差异
–*/
/*–调用示例
exec p_comparestructure ‘xzkh_model’,’xzkh_new’
–*/

if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[p_comparestructure]‘) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
drop procedure [dbo].[p_comparestructure]
GO

create proc p_comparestructure
@dbname1 varchar(250), –要比较的数据库名1
@dbname2 varchar(250) –要比较的数据库名2
as
create table #tb1(表名1 varchar(250),字段名 varchar(250),序号 int,标识 bit,主键 bit,类型 varchar(250),
占用字节数 int,长度 int,小数位数 int,允许空 bit,默认值 varchar(500),字段说明 varchar(500))

create table #tb2(表名2 varchar(250),字段名 varchar(250),序号 int,标识 bit,主键 bit,类型 varchar(250),
占用字节数 int,长度 int,小数位数 int,允许空 bit,默认值 varchar(500),字段说明 [...]

ODBC管理器中用户DSN,系统DSN,文件DSN的含义及用法

“ODBC数据源管理器”提供了三种DSN,分别为用户DSN、系统DSN和文件DSN。
1. 用户DSN会把相应的配置信息保存在Windows的注册表中,但是只允许创建该DSN的登录用户使用。
2.系统DSN同样将有关的配置信息保存在系统注册表中,但是与用户DSN不同的是系统DSN允许所有登录服务器的用户使用。
3.文件DSN把具体的配置信息保存在硬盘上的某个具体文件中。文件DSN允许所有登录服务器的用户使用,而且即使在没有任何用户登录的情况下,也可以提供对数据库DSN的访问支持。此外,因为文件DSN被保存在硬盘文件里,所以可以方便地复制到其它机器中(文件可以在网络范围内共享)。这样,用户可以不对系统注册表进行任何改动就可直接使用在其它机器上创建的DSN。
用户DSN和系统DSN的区别在于,用户DSN保存在注册表的HKEY_CURRENT_USER下,而系统DSN保存在HKEY_LOCAL_MACHINE下。

来源:CSDN

不使用游标删除用户表中有ProjectID的内容

declare @s varchar(8000)
declare @strProjectID VARCHAR(100)
set @s=”
SET @strProjectID=’ND0702′
select @s=@s+’Delete from ‘+o.name + ‘ where ProjectID=”’ + @strProjectID +””+ char(10) from sysobjects o
inner join syscolumns c on c.name=’ProjectID’ and   o.id=c.id
where o.xtype=’u’
–print @s
exec(@s)