查看: 7280|回复: 9

求sybase和SQLServer差异问题

[复制链接]
论坛徽章:
181
慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
跳转到指定楼层
1#
发表于 2006-9-17 12:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于Sybase和SQLServer的差异求解
关于数据库体系结构开发语法的差异等等,希望有高手提点一下
论坛徽章:
7
数据库板块每日发贴之星
日期:2005-11-14 01:01:31数据库板块每日发贴之星
日期:2005-12-07 01:01:37会员2006贡献徽章
日期:2006-04-17 13:46:34
2#
发表于 2006-9-17 22:48 | 只看该作者
这个问题非常不好答.  比如SQLServer 2000 和 SQLSERVER 2005 的差异就可以写一本书, Sybase 11 和 12 的差异同样可以写一本书.

然而好在MS SQL 和 Sybase 都支持 ANSCI 标准SQL, 而且它们的T-SQL extention 是同出一辙(Sybase T-SQL).

使用道具 举报

回复
论坛徽章:
0
3#
发表于 2006-9-18 12:27 | 只看该作者

ms和sybase的早期版本极其相似

但后来随着两公司的合作结束,他们分别在自己的版本中加入了不同的扩展功能。

使用道具 举报

回复
论坛徽章:
181
慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
4#
 楼主| 发表于 2006-9-18 20:34 | 只看该作者
能否给点简要的说明或者文章链接也可以

使用道具 举报

回复
论坛徽章:
7
数据库板块每日发贴之星
日期:2005-11-14 01:01:31数据库板块每日发贴之星
日期:2005-12-07 01:01:37会员2006贡献徽章
日期:2006-04-17 13:46:34
5#
发表于 2006-9-18 21:05 | 只看该作者

使用道具 举报

回复
论坛徽章:
181
慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
6#
 楼主| 发表于 2006-9-19 09:29 | 只看该作者

常见数据库系统之比较 - SYBASE 和 SQL SERVER
作者:佚名 来源:InterNet 加入时间:2005-2-2
之所以将这两种数据库一起是应为MS SQL Server是购买Sybase公司1987年推出的Sybase SQL Server, 又称为大学版
INGRES的第三代产品,所以他们实质是一样的。

Sybase公司是1984年成立的,属于后起之秀。他推出了支持企业范围的“客户/服务器体系结构”的数据库。Sybase把
“客户/服务器数据库体系结构”作为开发产品的重要目标。他们吸取了INGRES的研制经验,以满足联机事务处理应用的要
求,与1987年推出了Sybase SQL Server,称为大学版INGRES的第三代产品。

Sybase System 11.5是其最新产品,支持企业内部各种数据库应用需求,如数据仓库、联机事务处理、决策支持系统
和小平台应用等。

数据库服务器

Sybase是一个面向联机事务处理,具有高性能,高可靠性的功能强大的关系型数据库管理系统(RDBMS)。SYBASE数据
库的多库,多设备,多用户,多线索等特点极大地丰富和增强了数据库功能。因为SYBASE数据库系统是这样一个复杂的,
多功能的系统,所以对SYBASE数据库系统的管理就变得十分重要,管理的好坏与数据库系统的性能息息相关。

Sybase System 11.5的服务器端和新产品是Adaptive Server。它集成了原有的服务器系列,如SQL Server, SQL
Anywhere, Sybase IQ, Sybase MPP等。它具有多处理处理多种数据源的能力,包括遗留的非关系数据和分布是的事务;提
供了优化的数据存储与访问方法;提供了单一的编程模型。

SQL Server的新版本是SQL Server 7,SQL Server具有单进程愈多线索的体系结构。及SQL Server只有一个服务器进
程,所有的客户都连接多这个进程上。但是,改进程有细分为多个并发的线索,他们共享数据缓冲区和CPU时间,能及时捕
捉各用户进程发出的存取数据的请求,然后,按一定的调度算法处理这些请求,比操作系统直接对这些请求进行调度高效
的多。

Microsoft 提供了一个数据库引擎,应用范围可以从运行 Microsoft Windows? 95/98 操作系统的移动膝上型电脑,
到运行 Windows NT? Server 操作系统企业版的兆兆字节对称多处理器群集。所有这些系统都能保证关键任务业务系统要
求的安全性和可靠性。

SQL Server的事务处理量大,响应速度快,并能为数百或更多用户维持这种高性能。

SQL Server首先在核心层实现了数据完整性控制,包括建表时申明完整性和用触发器机制定义与应用有关的完整性。
支持分布式查询与更新。

开发工具

Sybase为用户提供了良好的开发工具和开发环境,支持组件创建和快速应用开发。

(1) PowerBuilder

PowerBuilder是一个可视化的客户/服务器应用开发工具,其强大的功能可以帮助用户快速开发复杂的应用。并且,还
提供与其他数据库的接口。

(2) Power Designer

这是一套紧密集成的计算机辅助软件工程(CASE)工具,用于为复杂的数据库应用完成分析、设计、维护、建立文档
和创建数据库等功能。

(3) Power J

这是基于JAVA应用的快速开发工具。

(4) Powre ++

是一组RAD C++客户/服务器和Internet面向对象的开发工具。

使用道具 举报

回复
论坛徽章:
181
慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
7#
 楼主| 发表于 2006-9-19 09:30 | 只看该作者

四大数据库的比较(SQLServer、Oracle、Sybase和DB2)

  本篇引用于公司数据库高手的文章。纯属个人意见。
  开放性:
  SQL Server
  只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据量的关键业务时。
  Oracle
  能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。
  Sybase ASE
  能在所有主流平台上运行(包括 windows)。 但由于早期Sybase与OS集成度不高,因此VERSION 11.9.2以下版本需要较多OS和 DB级补丁。在多平台的混合环境中,会有一定问题。VERSION 12.0以上版本得到了一定的改进。
  DB2
  能在所有主流平台上运行(包括windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%。
  可伸缩性,并行性
  SQL server
  并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。
  Oracle
  并行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。如果windowsNT不能满足需要,用户可以把数据库移到UNIX中。 Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。
  Sybase ASE
  虽然有DB SWITCH来支持其并行服务器,但由于DB SWITCH在技术层面还未成熟,且只支持版本12.5以上的ASE SERVER,因为DB SWITCH技术需要一台服务器充当SWITCH,从而在硬件开销上会有所增加。
  DB2
  具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境。数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。数据库分区有时被称为节点或数据库节点。
  安全性
  SQL server
  没有获得任何安全证书。
  Oracle Server
  获得最高认证级别的ISO标准认证。
  Sybase ASE
  获得最高认证级别的ISO标准认证。
  DB2
  获得最高认证级别的ISO标准认证。
  性能
  SQL Server
  多用户时性能不佳
  Oracle
  性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。
  Sybase ASE
  性能接近于 SQL Server。但在UNIX平台下的并发性要优与 SQL Server。
  DB2
  性能较高适用于数据仓库和在线事物处理。
  客户端支持及应用模式
  SQL Server
  C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB,ODBC连接.
  Oracle
  多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接。
  Sybase ASE
  C/S结构,可以用ODBC,Jconnect,Ct-library等网络客户连接。
  DB2
  跨平台,多层结构,支持ODBC,JDBC等客户
  操作简便
  SQL Server
  操作简单,但只有图形界面。
  Oracle
  较复杂,同时提供GUI和命令行,在windowsNT和unix下操作相同
  Sybase ASE
  较复杂,同时提供GUI和命令行。但GUI较差,常常无法及时状态,建议使用命令行。
  DB2
  操作简单,同时提供GUI和命令行,在windowsNT和unix下操作相同
  使用风险
  SQL server
  完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。
  Oracle
  长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。
  Sybase ASE
  向下兼容, 但是ct-library 程序不益移植。
  DB2
  在巨型企业得到广泛的应用,向下兼容性好。风险小。
  经过上述比较,我们不难发现,DB2是最好的数据库。

使用道具 举报

回复
论坛徽章:
181
慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
8#
 楼主| 发表于 2006-9-19 09:31 | 只看该作者

由Sybase向SQL Server移植数据库


  我最近参与了将一个Sybase数据库移植到Microsoft SQL Server 2000上的项目,我在这一项目上获得的经验,将对Sybase数据库管理员把Sybase数据库移植到SQL Server 2000平台上有一定的帮助。

  尽管二者之间的一些差别是相当大的,例如Sybase数据库管理系统中的存储过程在SQL Server就不能被编译,而其它差别则不太大。在完成这一转换前,对脚本文件和存储过程中编程逻辑的行为和结果进行测试是很有必要的。

  在下面的部分中,我们将讨论这二种数据库系统之间的一些主要的不同点,在移植的规划阶段,我们必须仔细研究这些区别。

  数据兼容模式

  对SQL Server 2000和Sybase之间的一些兼容性差别的一个临时性解决方案是改变SQL Server中的数据库兼容性级别,使之与Sybase相符。为此,我们可以使用sp_dbcmptlevel存储过程。
下面表中的语句和结果显示出不同版本数据库之间的差别:
(Untitled-1)

  注意:

  1、当兼容性模式被设置为70时,下面的词汇不能被用作对象名和标识符:BACKUP、DENY、PRECENT、RESTORE和TOP。

  2、当兼容性模式被设置为65时,下面的词汇不能被用作对象名和标识符:AUTHORIZATION、CASCASE、CROSS、 DISTRIBUTED、ESCAPE、FULL、INNER、JOIN、LEFT、OUTER、PRIVILEGES、RESTRICT、RIGHT、 SCHEMA和WORK。

  下面是sp_dbcmptlevel的语法:

sp_dbcmptlevel [[@dbname=] name][,[@new_cmptlevel=]version]

  @dbname是用于检查和改变兼容性水平的数据库名字。

  @new_cmptlevel决定数据库被设置的兼容性水平(将它设置为70、65、60,缺省值为NULL)。

  例如:

sp_dbcmptlevel pubs

  这一行代码返回下面的结果:

The current compatibility level is 70.(当前的兼容性级别为70。)

  现在我们来看一下另外一个例子:

sp_dbcmptlevel pubs, 65

  它返回如下的结果:

DBCC execution completed. (DBCC执行结束。)

  果DBCC打印出错误信息,则需要与系统管理员联系。我们可以使用rerunsp_dbcmptlevel验证pubs数据库是否修改得正确:

sp_dbcmptlevel pubs

  它返回下面的结果:

The current compatibility level is 65(当前的兼容性级别为65。)

  除了上面的例子外,兼容性级别的差别还扩展到了保留字。Sybase和SQL Server都有许多不能被用作数据库中对象名字的的保留字,二种产品的保留字相似,但并不完全相同。

  由于能够在Sybase中使用的对象可能不能在SQL Server中使用,这一问题使得由Sybase向SQL Server的移植凭添了许多困难。下面是在SQL Server中是保留字,而在Sybase中不是保留字的词汇清单。
注意:名字为下列清单中词汇的Sybase数据库中的对象在移植到SQL Server数据库时必须换为其它名字。

BACKUP COLUMN COMMITTED CONTAINS CONTAINSTABLE
CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER
DENY DISTRIBUTED FILE FLOPPY FREETEXT
FREETEXTTABLE FULL IDENTITYCOL INNER JOIN
事务管理模式

Sybase SQL Server

Set chained [ on : off ] Set implicit_transactions [on : off ]

  在Sybase中使用下面的代码判断事务模式:

SELECT @@tranchained
GO

  下面是可能返回的结果:

  0 表明使用的是非链锁式事务模式

  1 表明连接运行在链锁模式下

  在SQL Server中使用下面的代码判断事务模式:

IF (@@options & 2) > 0
 PRINT on
ELSE
 PRINT off

  下面是可能的返回结果:

0 off
>0 on

  隔离水平

  在一个关系数据库这样的多线程应用软件中,数据库引擎对运行的进程间的数据是如何被隔离的管理是非常重要的,在表示隔离水平时,Sybase和SQL Server的语法是不同的。下面的表格表明了Sybase和SQL Server在表示隔离水平时的差别。

Sybase SQL Server

0 READ UNCOMMITTED
1 READ COMMITTED
2 REPEATABLE READ
3 SERIALIZABLE

  游标语法

  二种产品中存储过程的创建和执行基本相似,但在移植时,游标语句中的一些例外是我们应当注意的。下面是一个例子:

CREATE PROCEDURE sql_cursor AS
DECLARE @lname char(20), @fname char(20)
DECLARE mycursor CURSOR FOR
SELECT au_lname, au_fname FROM authors
OPEN mycursor
FETCH FROM mycursor INTO @lname, @fname
WHILE @@ FETCH_STATUS = 0
/* Sybase数据库使用@SQLSTATUS而不是@@ FETCH_STATUS */
BEGIN
FETCH FROM mycursor INTO @lname, @fname
/*
** 这里应当是一些业务逻辑
*/
END
CLOSE mycursor
DEALLOCATE /* Sybase数据库在这里需要CURSOR这个词 * / mycursor

Sybase SQL Server

Fetch命令执行成功 0 0
Fetch命令执行失败 1 -2
没有可存取的记录了 2 -1
退回触发器

  SQL Server中不存在这个命令,因此在向SQL Server移植时,使用了ROLLBACK TRIGGER命令的Sybase存储过程必须被进行修改。在修改带有触发器的数据库表中的数据时,使用ROLLBACK TRIGGER命令容易引起误解,一个ROLLBACK TRIGGER命令只退回触发器以及触发触发器的数据修改,如果已经被提交了,则事务的其它部分会继续,被写到数据库中。因此,事务中的所有语句可能没有被成功地完成,但数据已经被提交了。
下面是Sybase数据库中一个使用ROLLBACK TRIGGER的样例触发器:

CREATE TABLE table1 (a int, b int)
GO
CREATE TRIGGER trigger1 on table1 FOR INSERT
AS
IF EXISTS (SELECT 1 FROM inserted WHERE a = 100)
BEGIN
ROLLBACK TRIGGER with RAISERROR 50000 Invalid value for column a
END
INSERT INTO table2
SELECT a, GETDATE() from inserted
RETURN
GO

  在上面的代码中,除非a = 100,则所有插入table1的数据也被作为审计行插入table2中,如果a = 100,ROLLBACK TRIGGER命令被触发,而INSERT命令没有被触发,批命令的其它部分继续执行,这时会出现错误信息,表明在一个INSERT命令中出现了错误。下面是所有的INSERT命令:

BEGIN TRAN
INSERT INTO table1 VALUES (1, 1)
INSERT INTO table1 VALUES (100,2)
INSERT INTO table1 VALUES (3, 3)
GO
SELECT * FROM table1

  在执行这些命令后,table1和table2二个数据库表将各有2个记录,Table1表中的值为1,1以及3,3,由于ROLLBACK TRIGGER命令,第二个INSERT命令没有执行;Table2表中的值为1,(当前日期)以及3,(当前日期),由于当a = 100时ROLLBACK TRIGGER被触发,触发器中的所有处理被中止,100没有被插入到Table2表中。
在SQL Server中模拟这一操作需要更多的代码,外部的事务必须与保存点同时使用,如下所示:

CREATE trigger1 on table1 FOR INSERT
AS
SAVE TRAN trigger1
IF EXISTS (SELECT * FROM inserted WHERE a = 100)
BEGIN
ROLLBACK TRAN trigger1
RAISERROR 50000 ROLLBACK
END
INSERT INTO table2
SELECT a, GETDATE() FROM inserted
GO

  这一触发器以一个存储点开始,ROLLBACK TRANSACTION只退回触发逻辑,而不是整个事务(规模要小于Sybases数据库中的ROLLBACK TRIGGER语句。对批命令的修改如下:

BEGIN TRAN
SAVE TRAN save1
INSERT INTO table1 VALUES (1, 1)
IF @@error = 50000
ROLLBACK TRAN save1
SAVE TRAN save2
INSERT INTO table1 VALUES (100, 1)
IF @@error = 50000
ROLLBACK TRAN save2
SAVE TRAN save3
INSERT INTO table1 VALUES (3, 3)
IF @@error = 50000
ROLLBACK TRAN save3
COMMIT TRAN

  我们可以发现,改变不可谓不大。由于ROLLBACK TRIGGER命令能够使任何批命令不能成功执行,因此在移植的SQL Server存储过程代码中必须包括另外的逻辑,根据ROLLBACK TRIGGER的使用,这可能是一个艰巨而必要的任务,没有什么捷径可走。如果在移植后所有的ROLLBACK TRIGGER命令被改变为ROLLBACK TRANSACTION,触发器的执行也会发生变化,因此我们应当十分小心。

  命令优化

  SQL Server能够对SELECT、INSERT、UPDATE和DELETE命令进行优化,Sybase数据库则只支持对SELECT命令进行优化。下面是SQL Server和Sybase在GUI方面的对比:

  Sybase SQL Server

  使用被称作SHOWPLAN的基于文本的查询分析工具 使用Query Analyzer。

  在ISQL中启动SHOWPLAN的命令按钮 多Query Analyzer中启动SHOWPLAN_ALL或 SHOWPLAN_TEXT的命令
SET SHOWPLAN ON SET SHOWPLAN_ALL
GO GO

  临时数据库表的名字

  表名字的类型    最大长度

  SQL Server表名字   128
  SQL Server临时表名字 116
  Sybase表名字      30
  Sybase临时表名字    13

  数据类型

  数据类型 Sybase SQL Server
  char(n) 255 8000
  varchar(n) 255 8000
  nchar(n) 255 4000
  nvarchar(n) 255 4000
  binary 255 8000
  varbinary 255 8000

  注意:

  1)SQL Server中的bit类型数据的值可以被设置为0、1或NULL。

  2) Sybase中的bit类型数据的值不可以被设置为NULL。

  同一性列

  Sybase SQL Server

Numeric(x,0) Tinyint,smallint,int,decimal(x,0) or numeric(x,0)

  打印语法

  在进行移植时,所有使用替换语法的打印语句必须被改变为RAISERROR语句。

  结论

  将Sybase数据库转换为SQL Server数据库并非是不可能的,但二种产品之间存在许多差异,在转换时需要加以解决。根据应用程序的规模,这种转换可能需要大量的时间。尽管无需重新编写所有的应用程序,但需要完成的工作并不少。

  我目前还没有发现这二种数据库间转换的更简单的方法。由于二种产品在许多方面都非常相似,我们非常容易成功地将Sybase数据库转换为SQL Server数据。

使用道具 举报

回复
论坛徽章:
181
慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
9#
 楼主| 发表于 2006-9-19 09:32 | 只看该作者

[精华] 最近一段时间都在弄sybase和ms-sqlserver,写了一份学习笔记

可能内容有些没章法。
以前在坛上许过写份学习资料出来。今天补上。望对学习者有帮助。

简介:
对学习sybase和ms-sqlserver的体会,包括安装、初始化、sql学习,过程和触发子创建,db-library和ct-library以及同oracle的不同之处,和细节注意对比。

[不能上传文件,只好列出内容]
Sybase学习体会
原创:戴黎鸣
第一大块:Sybase安装 [redhat 7.2]
Sybase rpm 包安装顺序 12.5.0.1 for linux
sybase-common-12.5.0.1DE-1.i386.rpm
sybase-ase-12.5.0.1ESD-1.i386.rpm
sybase-efts-12.5.0.1ESD-1.i386.rpm
sybase-openclient-12.5.0.1ESD-1.i386.rpm
sybase-esql-12.5.0.1ESD-1.i386.rpm
sybase-sqlremote-7.0.2-1.i386.rpm
sybase-chinese-12.5.0.1ESD-1.i386.rpm
安装
rpm -ivh sybase-common-12.5.0.3-7.i386.rpm
rpm -ivh sybase-ase-12.5.0.3-7.i386.rpm  [ -Uhv --nodeps]
rpm -ivh sybase-efts-12.5.0.3-7.i386.rpm  [ -Uhv --nodeps]
rpm -ivh sybase-openclient-12.5.0.3-7.i386.rpm
rpm -ivh sybase-esql-12.5.0.3-7.i386.rpm
rpm -ivh sybase-sqlremote-7.0.2-1.i386.rpm
卸载
rpm -e sybase-efts-12.5.0.3-7
rpm -e sybase-sqlremote-7.0.2-1
rpm -e sybase-esql-12.5.0.3-7
rpm -e sybase-openclient-12.5.0.3-7
rpm -e sybase-openclient-12.5.0.3-7
rpm -e sybase-ase-12.5.0.3-7
rpm -e sybase-chinese-12.5.0.3-7
rpm -e sybase-doc-12.5.0.3-7
rpm -e sybase-common-12.5.0.3-7
rpm -ql libstdc++
安装顺序和依赖关系说明:
sybase-common-12.5.0.1DE-1.i386.rpm The common package is a prerequisite to all other packages. It creates and installs the default runtime environment required by other packages, and includes tools to configure, install, and administer Adaptive Server and related components.
NOTE: The sybase-common-12.5-3.i386.rpm is a pre-required package. You must install it before you install any other rpm package as all depend on the common package.

sybase-ase-12.5.0.1ESD-1.i386.rpm This package installs all binary server components required to run Adaptive Server, Backup Server, XP Server, Monitor Server, Historical Server and related utilities and tools for database development and maintenance.

sybase-efts-12.5.0.1ESD-1.i386.rpm The efts package installs the Enhanced Full-Text Search Specialty Data Store, which provides the capability to do complex searches on character and text data stored in the ASE. The performance of the searches can be orders of magnitude faster than using standard SQL searches.

sybase-openclient-12.5.0.1ESD-1.i386.rpm The Open Client package installs the Sybase Open Client Software Development Kit (SDK). Open Client consists of programming interfaces and networking services for writing client applications for point-to-point communication to Sybase server products.

sybase-esql-12.5.0.1ESD-1.i386.rpm The Embedded SQL package installs the Sybase ESQL binaries, libraries, include files and sample programs. It consists of the programming interfaces and networking services for writing client application in Embedded-SQL for point-to-point communication to ASE.
NOTE: The sybase-esql-12.5.0.1ESD-1.i386.rpm package requires the sybase-openclient-12.5.0.1ESD-1.i386.rpm package.

sybase-sqlremote-7.0.2-1.i386.rpm The SQL Remote package installs the Sybase SQL Remote for Adaptive Server Enterprise. SQL Remote is a data-replication technology designed for two-way replication between a consolidated data server and large numbers of remote databases, typically including many mobile databases.

sybase-chinese-12.5.0.1ESD-1.i386.rpm
sybase-french-12.5.0.1ESD-1.i386.rpm
sybase-german-12.5.0.1ESD-1.i386.rpm
sybase-japanese-12.5.0.1ESD-1.i386.rpm
sybase-korean-12.5.0.1ESD-1.i386.rpm
sybase-polish-12.5.0.1ESD-1.i386.rpm
sybase-portuguese-12.5.0.1ESD-1.i386.rpm
sybase-thai-12.5.0.1ESD-1.i386.rpm
sybase-spanish-12.5.0.1ESD-1.i386.rpm
NOTE: These packages cannot be installed on a platform that is running an incorrect version of Linux, kernel and run-time. These packages do allow for upgrade of previous released versions under Linux. These packages do not allow for degrading later installs.

Consistency Check: Once the files have been transferred to the target machine, perform a consistency check before installing the packages. Enter:

#rpm -- checksig *.rpm

You should receive the following output:
sybase-common-12.5.0.1DE-1.i386.rpm: md5 OK
sybase-ase-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-efts-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-esql-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-openclient-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-sqlremote-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-french-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-german-12.5.0.1ESD-1.i386.rpm: md5 OK

Refer to the Installation Guide for detailed installation instructions

usage: isql [-b] [-e] [-F] [-p] [-n] [-v] [-X] [-Y] [-Q]
        [-a display_charset] [-A packet_size] [-c cmdend] [-D database]
        [-E editor [-h header [-H hostname [-i inputfile]
        [-I interfaces_file] [-J client_charset] [-K keytab_file]
        [-l login_timeout] [-m errorlevel] [-M labelname labelvalue]
        [-o outputfile] [-P password] [-R remote_server_principal]
        [-s col_separator] [-S server_name] [-t timeout] [-U username]
        [-V [security_options]] [-w column_width] [-z localename]
        [-Z security_mechanism]

1、 Root用户,先将rpm包解压,解压后的目录为/opt/Sybase-12.5
rpm -ivh *.rpm 顺序为前面所述的顺序。
如果以前安装过,用
rpm -e  'rpm -qa|grep sybase'卸载
2、 执行$SYBASE/install/sybinstall.sh,它将创建sybase用户和口令,用passwd将sybase的用户口令修改为所要设定的口令。
3、 在root用户登录文件中加入以下语句(以bash用户,.bash_profile为例。更改系统内存值为60M):echo "62914560" >; /proc/sys/kernel/shmmax
{
1、 改/etc/sysctl.conf文件加入
   kernel.shmmax=10000
   fs.aio-max-size=10000
2、 编辑$SYBASE/ASE/init/ sample_resource_files/ srvbuild.adaptive_server.rs文件
其他服务建立文件也如此。
   注意输入数据文件时,如果没有建立raw device 将要指定存放的目录和数据库数据文件。
3、 修改后用svrbuildres -r  $SYBASE/ASE/init/sample_resource_files/
srvbuild.adaptive_server.rs执行将建立数据库。
} /opt/sybase-12.5/ASE-12_5/bin/srvbuildres -r /opt/sybase-12.5/ASE-12_5/init/
sample_resource_files/leon.adapative_server.rs
4、 设置完成后,重新用sybase登陆[他会自动设定完成环境变量],建一个目录存放日后的数据库文件
5、 重新restart computer
6、 sybase登陆x-windows,执行$SYBASE/ASE-12_5/bin/srvbuild,选择完四个服务器,键入数据,执行创建。
[
在X-Windows中使用srvbuild工具配置ASE产品
1、用sybase用户登录X-Windows,执行sybase安装目录(/opt/sybase-11.9.2)下/bin/srvbuild命令。
2、在srvbuild窗口中,选择要安装Server类型。把四种Server都选上。
3、给Server命名。将Adaptive Server命名为TEST,相应地,Backup Server自动命名为TEST_back, Monitor Server命名为TEST_mon,XP Server命名为TEST_XP。点击OK按钮,进入各Server的配置过程。
4、配置Adaptive Server。填写或选择以下内容:
Master device path(主设备路径):/db/sybsystem/master.dat
Master device size(MB)(主设备大小):60
Master database size(MB)(主数据库大小):20
Sybsystemprocs device path(系统存储过程设备路径):/db/sybsystem/systemprocs.dat
Sybsystemprocs device size(MB)(系统存储过程设备大小):60
Sybsystemprocs database size(MB)(系统存储过程数据库大小):60
Error log path(错误日志路径):/opt/sybase-11.9.2/install/TEST.log
Transport type(传输协议类型):tcp
Host name(主机名):192.168.0.1
Port number(监听端口号):4100
点击OK按钮,进入下一配置过程。
5、配置Backup Server。填写或选择以下内容:
Error log path:/opt/sybase-11.9.2/install/TEST_back.log
Tape configuration file:/opt/sybase-11.9.2/backup_tape.cfg
Language:(不填)
Character set:(不填)
Maximum number of network connections:25
Maximum number of server connections:20
Transport type:tcp
Host name:192.168.0.1
Port number:4200
点击OK按钮,进入下一配置过程。
6、配置Monitor Server。填写或选择以下内容:
Maximum number of connections:5
Error log path:/opt/sybase-11.9.2/install/TEST_mon.log
Configuration file path:/opt/sybase-11.9.2/install/TEST_mon.cfg
Share memory directory:/opt/sybase-11.9.2
Transport type:tcp
Host name:192.168.0.1
Port number:4300
点击OK按钮,进入下一配置过程。
7、配置XP Server。填写或选择以下内容:
Transport type:tcp
Host name:192.168.0.1
Port number:4400
点击Build Server按钮,开始创建Server,这时出现一个窗口,你可以看到整个创建过程。如果有显示以下类似信息,表示创建Server成功:
……
Server TEST was successfully created.
Done.
……
8、创建Server成功后,系统就会问你是否将Server本地化(Localize),即是用另外一种语言代替默认的 us_english language,以及改变默认的iso_1字符集和Binary索引顺序。选择是NO。为什么呢?曾经把中文(eucgb)设为默认字符集,反而不支持中文大字集,因为eucgb是基于GB2312标准的。查了Sybase的手册中一些关于本地化的说明,得出的印象是,在ASE中有Unicode转换机制,可以转换来自不同字符集的服务器或客户端的数据。应用也证明,使用ASE的默认的语言、字符集、索引顺序来处理中文是可行的。  
9、安装成功后要做的几件事。首先在Linux控制台模式下以sybase用户登录。
① 确认Server是否在运行。使用$SYBASE/install/下的showserver命令($SYBASE表示sybase的安装目录),应该可看见系统有几个sybase相关进程。或者用$SYBASE/bin/下的isql -Usa -P -STEST命令来登录Server,应该可以看见 isql的提示符"1>;",再键入exit就可以退出了。
② 用sp_password null, 新口令
go将sa的用户口令改掉。
]
7、 成功后将自动启动数据库。可用isql -Usa -Ppassword -Sserver_name连进数据库。
isql -Usa -P -Ssybase
8、 执行1>;sp_diskdefault master , defaultoff
        2>;go
   将以后用户数据库数据文件不要建立在master所在的数据文件中。
9、 用sp_password oldpassword,newpassword设定sa的用户口令。
a) sp_password null,Sybase
b) go
10、 用shutdown关闭数据库。
11、 重新启动数据库用$SYBASE/ASE/install/RUN_sybase启动,这为前台启动方式。后台启动方式用。
   $SYBASE/ASE/install/startserver -f  RUN_Sybase
   RUN_sybase例子:
#!/bin/sh
#
# ASE page size (KB):   2048
# Master device path:   /opt/sybase-12.5/data/nextip.dat
# Error log path:       /opt/sybase-12.5/ASE/install/sybase.log
# Configuration file path:      /opt/sybase-12.5/ASE/sybase.cfg
# Directory for shared memory files:    /opt/sybase-12.5/ASE
# Adaptive Server name: sybase
#
/opt/sybase-12.5/ASE/bin/dataserver \
-d/opt/sybase-12.5/data/nextip.dat \
-e/opt/sybase-12.5/ASE/install/sybase.log \
-c/opt/sybase-12.5/ASE/sybase.cfg \
-M/opt/sybase-12.5/ASE \
-ssybase \

关闭数据库:
用sa用户进入数据库执行shutdown命令即可完成数据库的关闭。

数据库设备的建立
重启在sybase用户下,
1>; use master
2>; go
3>; sp_diskdefault master , defaultoff
4>; go
5>; sp_helpdevice
6>; go
1>; disk init
2>; name='sybsyntaxdev',
3>; physname='/opt/sybase-12.5/data/user_data/testdb.dat',
4>; vdevno=4,
5>; size='30m'
6>;
7>; go
建立数据库设备后就可以建立用户数据库
sa
create database userdb on db_dev_name=size M

1>; disk init
2>; name='testdbdev',
3>; physname='/opt/sybase-12.5/data/user_data/testdb.dat',
4>; vdevno=6,
5>; size
6>; go
8>; use master
9>; go
10>; create database testdb on testdbdev=10
11>; go
建立用户数据库的用户
1>;sa connenction into database
2>;use testdb
3>;go
4>;sp_addlogin ldai, password, null, null, 'dailiming'
5>;go
6>;sp_adduser ldai,dlm
7>;go
isql -Uldai -Ppassword1 -Ssybase就可以连进testdb用户数据库了。
注意口令长度不得小于6位,如果口令以数字开头,还需要以单引号括起来。
Sp_addlogin提供用户能访问数据库的权限,如果没有指定用户具体访问那个数据库,则还需要在相应数据库中用sp_adduser user_name, user_password建一个相同名和口令的用户。
例如
1>; sp_adduser ldai, dlm
2>; go
3>;

如果用sa用户创建了一个用户数据库,想将他的所有者由sa改为其他用户。
确定其他用户只具有addlogin,不具有adduesr。如果有addusers则要sp_dropuser删除掉,否则不能赋给他所有者权限。
Isql -Usa
1>; use testdb
2>; go
3>; sp_changedbowner ldai, testdb
4>; go
5>; sp_default ldai, testdb
6>; go
7>; sp_helpdb testdb
8>; go
将更改数据库owner了,注master不能更改

建用户有两中方式,上面这一种是建立用户帐号,再在具体数据库中建立该数据库应用帐号。较为繁琐。可通过sp_addlogin加其他参数,一步到位将数据库用户建立起来。
Sp_addlogin user_name,user_password,所用数据库名称,null, '用户全名备注'
例如:
sp_addlogin nextip, nextip, NEXTIPDB, null, 'nextipdb's dba'

Msg 5106, Level 16, State 6:
Server 'sybase', Line 1:
Parameter 'SIZE' requires value of type 'int'.
1>; disk init
2>; name='sybsyntaxdev',
3>; physname='/opt/sybase-12.5/data/user_data/sybsyntaxdev.dat',
4>; vdevno=4,
5>; size='10m'
6>; go
00:00000:00008:2003/10/22 14:33:19.21 kernel  Initializing virtual device 4, '/opt/sybase-12.5/data/user_data/sybsyntaxdev.dat' with dsync 'on'.
00:00000:00008:2003/10/22 14:33:19.21 kernel  Virtual device 4 started using asynchronous i/o.
00:00000:00008:2003/10/22 14:33:19.22 kernel  Initializing device /opt/sybase-12.5/data/user_data/sybsyntaxdev.dat from offset 0 with zeros.
00:00000:00008:2003/10/22 14:33:19.25 kernel  Finished initialization.
1>;

初次建立数据库对sa的口令要进行修改。
sp_password  old_password, new_password, login name
1>; sp_password null, nextip, sa
2>; go
3>;

sp_dboption 是用来打开或关闭数据库的选项 [select into/bulkcopy]。只用这样数据库才能执行如 select identity(int) id0,* into #temp1 from tablename这样的sql语句。查看是否打开 option用sp_helpdb就可以查看。Sp_dboption只能在master 数据库中引用。是否允许列字段为空还是不为空也是用这个命令。
1>; use nextipdb
2>; go
3>; master..sp_dboption nextipdb,"select into/bulkcopy","true"
4>; go
5>; checkpoint
6>; go

1>; dbcc checkdb
2>; go
3>; dbcc checkcatalog
4>; go

1、增加自定义的数据类型为sp_addtype  datatypename ,"length",
FE: sp_addtype tid, "char(6)", "not null"
2、查看某一用户是否有什么权限,sp_helprotect user_name
4、 修改用户出始登陆的数据库,命令为sp_modifylogin
5、 检索identity字段可以用syb_identity=指定值来检索,如
t_dns_rezo_gs中有且一个identity字段[rzgs_id ],则可如下检索
select count(*) from t_dns_rezo_gs where syb_indentity=1
6、 sp_dboption可设置数据库通用的一些选项。
7、 当想要对表进行手工插入identity时,如果没有set identity_insert  table_name on/off打开,
就要打开,如果一旦打开,每一笔记录都要手工指明identity值,而不是自动插入形式,切记。如果变回off后,则identity记数从表中最大的identity值开始记数。例最大值为10,则记数从11开始,中间就有gap出现了。
8、 identity默认精度为18位,如果达到了,就需要增加其精度。可用alter table table-name
modify identity_col_name, numeric(20,0)进行修改精度。
9、 使数据库自动为新建表建立一个隐藏的identity字段为sp_dboption db_name , "auto identity", "true"
为identity设置精度,由管理员操作sp_configure "size of auto identity", 精度位数
如sp_configure "size of auto identity",15
10、 在当前数据库中创建另外一个数据库的表或其他对象, create other_db_name..object_name
如: create table newdb..t_dns_gs (name varchar(255))
11、 select user_name() /user  / db_name() 返回当前用户或数据库
12、 col_length("表名", "字段名" 返回指定字段的长度/ datalength("列名"实际存储长度对varchar/期于是创建时指定的长度
13、 isNull(exp1, exp_value) 为如果exp1为null则用exp_value替代
14、 convert(转换后的类型和长度,要转换的类型值)
如:select "my Test" + ""+convert(varchar(20),1211333)
1>; select mmm="my Test" + ""+convert(varchar(20),1211333)
2>; go
mmm                          
----------------------------
my Test 1211333              

(1 row affected)
15、 获取当前时间为select  getdate()
16、 当前变量申明 declare @变量名 类型
赋值操作select @变量名=变量值
如:
declare @sIpad varchar(20),@iNum numeric(2,0)
select @sIpad='0AC80001',@iNum=32
17、 看过程的源码sp_helptext  过程名
例子:
1>; sp_helptext p_convert_num_to_char
2>; go
# Lines of Text
---------------
               1
(1 row affected)
text                                                                                                                                                                                                                                                            
----------------------------------------------------------------------------------------------------------------------
create procedure p_convert_num_to_char
@cint numeric, @outchar varchar(10) output
as
if (@cint=4)
   select @outchar='Four'
if (@cint=5)
   select @outchar='Five'
if (@cint=6)
   select @outchar='Six'   
(1 row affected)
(return status = 0)

18、 oracle中查看源码,查看该sources表
19、 在一个过程中调用另外一个过程,
例如:
create procedure test_one @test_proc_name varchar(255)
as exec @test_proc_name
20、 记住在sybase中执行sql是用'go'不是以';'为结束兼执行
21、 创建数据库用户:sa用户 master库中,sp_addlogin user,password,dbname
22、 变更数据属主::sa用户进入要变更的数据库执行 sp_changedbowner user,dbname
23、 设置用户的默认登陆数据库::sa用户进入要设定的数据库执行:
sp_defaultdb user,dbname
24、 以#开头的临时表只是在某一过程或sql操作中存在,一旦过程或sql操作结束,则临时表就不存在了,如果再要访问就回出错。解决是不建立以#为preffix的表。
25、 要想直接手工插入值到表中identity字段,需要打开该表的identity_insert选项。
Set identity_insert 表名 on/off
如:
set identity_insert t_dns_rezo_gs on
这样insert into t_dns_rezo_gs(rzgs_id,rzgs_name) values(999,'12121')才会成功。
26、 指定某个过程什么时候执行后用waitfor delay "hh24:mi:ss",并且用了这种方式后该connection不会有什么响应直到过程被执行完成。
如半个小时后执行过程test_p
begin
waitfor delay "0:30:00"
    exec test_p
end
27、 调用带返回参数的过程完整例子
create procedure p_convert_num_to_char
@cint numeric, @outchar varchar(10) output
as
if (@cint=4)
   select @outchar='Four'
if (@cint=5)
   select @outchar='Five'
if (@cint=6)
   select @outchar='Six'   
go

declare @getchar varchar(10)
exec p_convert_num_to_char 4,@outchar=@getchar output
28、 过程中有返回参数时,如果预先设定参数值,最终都会改变
如:
declare @First int
select @First=123
exec test_p @second=@First output
//运行结果为999
则@second和@First 都为999
29、 过程名改名sp_rename oldname, newName
30、 ct-library编程,在sybase提供的linux中有,环境搭建要点,要确定$SYBASE设定了,$SYBASE_OCS设定 open client所在目录即可不要是全目录,还要设定平台$SYBPLATFORM=linux; 具有这三个环境变量,open client提供的sample才可大部分编译通过;其中有几个程序由于找不到-lsrv,而编译通不过。推测可能涉及了open server的东西,所以没有通过。
例子程序可以单独编译,如make 例子名    [F.E   make firstapp
]
设定LD_LIBRARY_PATH=$SYBASE/$SYBASE_OCS/lib

编译形式例如firstapp.c
$SYBASE=/opt/sybase-12.5
$SYBASE_OCS= OCS-12_5
cc -o fist firstapp.c -I. -I/opt/sybase-12.5/OCS-12_5/include -L/opt/sybase-12.5/OCS-12_5/lib -rdynamic -ldl -lnsl -lm  -lct -lcs -lsybtcl -lcomn -lintl
31、 db-library编译语句:
cc  -I. -I/opt/sybase-12.5/OCS/include example1.c /opt/sybase-12.5/OCS/lib/libsybdb.a -lm -o example1
   同样要设好SYBASE SYBASE_OCS SYBPLATFORM
   并且要保证interface文件中连接服务器是对的。
   同时对于想要连接的服务器名要在环境变量DSQUERY中设好。
  如:
  export DSQUERY=accunetsvr

  注意,用hostname作为连接名时,确保/etc/hosts中的IP和hostname有对应且对应正确。

32、 db-library 经实验数据库连接结构支持线程间的传递,将函数打包用下列样式:
gcc -c -I. -I/opt/sybase-12.5/OCS/include s_fcts.c
ar r libleon.a s_fcts.o
rm -rf *.o
打包完毕
调用函数进行编译样式:
cc -I. -I/opt/sybase-12.5/OCS/include ss_nip_checkUGandUser.c libleon.a
         /opt/sybase-12.5/OCS/lib/libsybdb.a -lm -o leon4
或者
cc  -I. -I/opt/sybase-12.5/OCS/include -o leon4 ss_nip_checkUGandUser.c libleon.a
/opt/sybase-12.5/OCS/lib/libsybdb.a  -lm
33、 DB-library的应用程序运行其他机上访问另一台机(数据库所在的机器).在客户机上需要装sybase-comom 和syabse- openclient组件。需要设定对SYBASE / DSQUERY. 其中sybase要设定为指向interfaces文件的路径, DSQUERY要设定为要远程访问的主机名(adapative_server_name).将远程主机的interfaces拷贝到客户机上 SYBASE指定的目录即可。注意如果没有设定DSQUERY,则程序默认去找sybase的数据库,这时如果没有该数据库名字在interfaces文件中,程序就会不能运行。
   [实际只需设定好DSQUERY环境变量和interface文件即可]
34、 DB-library应用在多线程中每次都要重新连接数据库,否则一定时间后连接会被操作系统重置掉。  Connection reset by peer
35、 DB-library的错误捕捉。系统提供一种系统错误信息函数自动在出现错误时去捕捉显示错误信息。
   int msg_handler(dbproc, msgno, msgstate, severity, msgtext,
                srvname, procname, line)
DBPROCESS       *dbproc;
DBINT           msgno;
int             msgstate;
int             severity;
char            *msgtext;
char            *srvname;
char            *procname;
int      line;
{};
int err_handler(dbproc, severity, dberr, oserr, dberrstr, oserrstr)
DBPROCESS       *dbproc;
int             severity;
int             dberr;
int             oserr;
char            *dberrstr;
char            *oserrstr;
{};

  dbmsghandle(msg_handler);
dberrhandle(err_handler);

除此之外,用户如果想要自己控制错误信息可在dbsqlexec() 调用后并且while()处理完后,调用dbcount(dbproc)进行错误信息判断,如果等于-1则出现错误。特例调用没有select的过程::dbnocount设为on::没有select的sql语句::sql写错::sql执行错误等都可以出现-1所以要小心判断处理。
36、 Jdbc连接sybase。首先需要jconn2.jar和jTDS2.jar文件,在环境变量CLASSPATH设定好。
Class.forName("com.sybase.jdbc2.jdbc.SybDriver";
url结构为: jdbc:sybase:Tds:dbserver_ip/dbserver_hostname:dbserver_port/dbname
dbserver的端口为数据库服务器上的interfaces文件中对应的数据库端口。
例子:
192.168.0.6
interfaces
[root@accunetsvr sybase-12.5]# more interfaces
accunetsvr_text
        master tcp ether accunetsvr 4500
        query tcp ether accunetsvr 4500


accunetsvr
        master tcp ether accunetsvr 4100
        query tcp ether accunetsvr 4100


accunetsvr_back
        master tcp ether accunetsvr 4200
        query tcp ether accunetsvr 4200


accunetsvr_mon
        master tcp ether accunetsvr 4300
        query tcp ether accunetsvr 4300


ACCUNETSVR_XP
        master tcp ether accunetsvr 4400
        query tcp ether accunetsvr 4400

可知dbserver_name是accunetsvr
  dbserver_ip    是192.168.0.6
dbserver_port  是4100
dbname为nextip
  url为  jdbc:sybase:Tds:192.168.0.6:4100/nextip
37、创建identity列,如果是create table 时一定是numeric型。如果想要创建数据库自动为新建的所有表增加一个隐藏的 identity字段,用[sp_dboption database_name, "auto identity", "true"]。在检索数据的时候必须隐式加上SYB_IDENTITY_COL作为隐藏的identity列,例如select SYB_IDENTITY_COL,  sn_name from t-subnet
默认的隐藏精度大小为10如果用户想要增大其精度,可用[sp_configure  "size of  auto  identity", 新的精度],例如: sp_configure "size of auto identity",15
38、 从select into 创建一个新的idenetity列,这在sql语句分页检索用。
Select idenetity_name=identity(精度) , *  into new_table from old_table;
如:
select id0=identity(18),* into #subnets from t_subnet where sn_type=10;
39、  实现用sql语句进行分页查询方法:
A. 创建一个临时表带identity字段 select id=indentity(20), * into #table_anme from table_name where 条件
B. 然后根据id进行检索第n条到m条数据 (也可用between and)
C. 最后Drop掉该临时表
D. 注意要打开数据库的select into /bulk copy属性 sp_dboption database_name, "select into/bulk copy", "true"才能进行select into操作
E. mssql中格式为select identity(int)  id, * from #table_name from table_name where 条件
40、 linux下访问sql-server用db-library与sybase相同要素。只是远程访问端口为sql-server指定的1433

41、 JDBC访问MS-SQLSERVER
连接数据库:[需要这三个jar文件msbase.jar msutil.jar mssqlserver.jar]
JDBC DRIVER:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://Ip Or Name:1433;DatabaseName=XXX
42、 Oracle中的外连接符为=(+) 或(+)= 在Sybase中为=* 或 *=
43、 执行sybase过程中会有日志满了或存储空间不够了,出现supsend状态,可用
isql  -Usa -Ppassword -Sdbservername
进去执行dump tran db_name with truncate_only进行清空操作
或者dump tran db_name to 'path/file'进行备份在执行清空。
44、 ms-sql中的substring(string, start, length)函数参数,start和length为INT型不能为numeric型。
45、 select * into 在oracle中的用法在ms-sql和sybase中的用法为select @变量=column
from 表名 where 条件
46、 游标在ms-sql和sybase中差别主要为while 判断的全局变量不同。
Sybase中为@@sqlstatus = 0
Ms-sql中为@@FETCH_STATUS = 0
   关闭游标时在ms-sql中除了[close 游标名] 还要增加[deallocate 游标名]
   
47、 MS-SQL对于sql语句大小写不敏感,sybase对大小写敏感。

48、 oracle同sybase和mssql的常用函数对比
ORACLE SYBASE MS-SQLSERVER
SysdateTo_char(, '格式')格式:yyyymmddhh24miss任意组合 getdate()可用year() month() day()分解获得年月日 convert(varchar, getdate(), 108)是 hh:mm:ss getdate()可用year() month() day()分解获得年月日convert(varchar, getdate(), 108) 108是hh:mm:ss120是yyyy-mm-dd
Length() Datalength() Datalength()
Ltrim() rtrim() Ltrim() rtrim()  Ltrim() rtrim()
Substr() Substring() Substring(varchar, INT, INT)
Replace('123', '2', 'A) Replace('123', '2', 'A)
instr
Lpad() rpad() Replicate('0', 32) Replicate('0', 32)
Upper() lower() Upper() lower() Upper() lower()

49、 日期计算在ms-sql中
dateadd(日期代码,日期值, 日期)
select convert(varchar,getdate(),120) as year,convert(varchar,dateadd(ss, 1200,getdate()),120) as nYear
go
日期部分           简写               值
year                yy                1753--9999
quarter             qq                1--4
month               mm                1--12
day of year         dy                1--366
day                 dd                1--31
week                wk                1--53
weekday             dw                1--7(Sunday--Saturday)
hour                hh                0--23
minute              mi                0--59
second              ss                0--59
milisecond          ms                0-999

也可
select convert(varchar, getdate(), 111)+' '+convert(varchar,getdate(),108) as oldtime,convert(varchar,dateadd(ss,1200,getdate()),111)+' '+convert(varchar,dateadd(ss,1200,getdate()),108) as date
也可
select convert(varchar,convert(datetime,'20031223'),111)
go


50、 PostgreSQL中的lib编程时,select 和update /delete的成功失败条件判断是不同的。
Update/delete:: strcmp(PQcmdStatus(temp_res), ""==0
select :: !temp_res||PQresultStatus(temp_res) != PGRES_TUPLES_OK
51、 日期各格式的引用模式ms-sql和sybase中都通用
yyyy/mm/dd hh24:mi:ss
select convert(varchar, getdate(), 111)+' '+convert(varchar,getdate(),108) as oldtime,convert(varchar,dateadd(ss,1200,getdate()),111)+' '+convert(varchar,dateadd(ss,1200,getdate()),108) as date
select name,text from all_source where type='FUNCTION' and name='F_CHECK_IB_SCOPE';
select convert(varchar,convert(datetime,'20031223'),111)
go
Select count(ipgs_host_name)||',host-'||f_ipad_change_dec4('%s','1') From t_ipdev_gs

yyyy/mm/ddhh24miss
Select CO_DESC,to_char(sysdate - 1/48,'yyyymmddhh24miss') co_date from T_LICENSE
dateadd(ss, -1800, getdate())
select co_desc, convert(varchar, dateadd(ss, -1800, getdate()),111)+convert(varchar,dateadd(ss, -1800, getdate()),108) as co_date from t_license
select convert(varchar, getdate(), 111)+' '+convert(varchar,getdate(),108) as oldtime,convert(varchar, dateadd(ss, -1800, getdate()),111)+convert(varchar,dateadd(ss, -1800, getdate()),108) as co_date

yymmddhh:mi:ss
select convert(varchar,getdate(),112)+convert(varchar,getdate(),8)
go
52、 显示sql执行时间用: isql  -Unextip -Pnextip  -Sleon1 -p
        进入即可,加小写-p参数
53、 MS-SQL中创建数据库
create database NEXTIPDB
on primary
(
name = DEVDB,
filename = 'd:\mssql_data\devdb.mdf',
size = 30MB,
maxsize = 100MB,
filegrowth = 10MB
),
(
name = DEVDB1,
filename = 'd:\mssql_data\devdb1.ndf',
size = 10MB,
filegrowth = 10MB
)
Log on
(
name = DEVDBLOG,
filename = 'e:\mssql_log\devdblog.ldf',
size = 10MB,
maxsize = 100MB,
filegrowth = 10MB
)
go
54、 细小区别
Sybase::
IF NOT EXISTS (SELECT * FROM master..syslogins, master..sysdatabases
WHERE master..syslogins.suid = master..sysdatabases.suid
AND master..syslogins.name = 'nextip')
EXEC sp_changedbowner nextip, NEXTIPDB
GO

Ms-sqlserver::
IF NOT EXISTS (SELECT * FROM master..syslogins, master..sysdatabases
WHERE master..syslogins.sid = master..sysdatabases.sid
AND master..syslogins.name = 'nextip')
EXEC sp_changedbowner nextip, NEXTIPDB
GO

使用道具 举报

回复
论坛徽章:
5
蛋疼蛋
日期:2013-06-04 20:22:48蜘蛛蛋
日期:2013-06-24 21:44:33技术图书徽章
日期:2013-08-21 09:18:55保时捷
日期:2013-12-11 23:42:072014年世界杯参赛球队: 荷兰
日期:2014-07-03 13:39:52
10#
发表于 2013-6-15 18:04 | 只看该作者
bq_wang 发表于 2006-9-19 09:32

[精华] 最近一段时间都在弄sybase和ms-sqlserver,写了一份学习笔记

感谢   学习了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表