随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从https://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站https://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!
如有Sybase数据库技术问题需要咨询,请联系我!
以下官方手册为ASE 15.7 ESD#2中文版:
- 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
- 新增功能摘要
- 新增功能指南
- ASE 15.7 发行公告
- 配置指南(windows)
- 安装指南(windows)
- 参考手册:构件块
- 参考手册:命令
- 参考手册:过程
- 参考手册:表
- Transact-SQL® 用户指南
- 系统管理指南,卷 1
- 系统管理指南,卷 2
- 性能和调优系列:基础知识
- 性能和调优系列:锁定和并发控制
- 性能和调优系列:监控表
- 性能和调优系列:物理数据库调优
- 性能和调优系列:查询处理和抽象计划
- 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
- 性能和调优系列:利用统计分析改进性能
- 程序员参考 jConnect for JDBC 7.0.7
- Adaptive Server Enterprise 中的 Java
- 组件集成服务用户指南
- Ribo 用户指南
- 内存数据库用户指南
- Sybase Control Center for Adaptive Server® Enterprise
- 安全性管理指南
- 实用程序指南
内置函数
有多种不同类型的内置函数。用于控制如何使用这些函数类型的规则可 能各不相同。本节介绍各种不同函数类型,并提供有关如何使用它们的 基础知。请参见 《参考手册:构件块》以及 《XML 服务》(关于 XML 函数)。
系统函数返回有关数据库的信息。许多系统函数提供查询系统表的快捷 方式。当系统函数的参数为可选时,就会采用当前的数据库、主计算机、 服务用户或数据库用户。除 user 之外,即使参数为 NULL,系统函数也 始终使用小括号。
例如,若要查找当前用户的名称,可省略参数,但要包括小括号。例如:
select user_name()
-------------------
dbo
字符串函数对字符串、表达式以及 (有时)二进制数据进行多种运算。 如果将常量用于字符串函数,则应使用单引号或双引号将其括起来。可 以并置进制表达式 (请参见 第 469 页的 “并置表达式”)和字符表达
式 (请参见 第 470 页的 “嵌套字符串函数”)。
大多数字符串函数只能用于 char、 nchar、 unichar、 varchar、 univarchar 和 nvarchar 数据类型以及隐式转换为 char、unichar、varchar 、univarchar 的数据类型。少数字符串函数也可用于 binary 和 varbinary 数据。patindex 可用于 text、 unitext、 char、 nchar、 unichar、 varchar、 nvarchar 和 univarchar 列。
每种函数还可接受隐式地转换为指定类型的参数。例如,接受近似数值 表达式的函数还可接受整数表达式。 Adaptive Server 会自动将参数转换 成所需类型。
使用 + 字符串并置运算符,可以并置二进制或字符串表达式,也就是 说,组合两个或更多的字符或二进制字符串、字符或二进制数据或它们 的组合。并置的字符串的最大长度是 16384 字节。
可以并置 binary 和 varbinary 列以及 char、 unichar、 nchar、 varchar、 univarchar 和 nvarchar 列。如果用 char、 nchar、 nvarchar 和 varchar 并置 unichar 和 univarchar,结果将是 unichar 或 univarchar。不能并置 text、 unitext 或 image 列。
并置语法为:
select (expression + expression [+ expression]...)
例如,组合两个字符串:
select ("abc" + "def")
-------
abcdef
(1 row affected)
若要在列标题 Moniker 下以先姓后名的顺序组合 California 作者的姓名, 并在姓后加一个逗号和空格,请输入:
select Moniker = (au_lname + ", " + au_fname) from authors
where state = "CA"
Moniker
-------------------------------------------------
White, Johnson Green, Marjorie Carson, Cheryl O’Leary, Michael Straight, Dick Bennet, Abraham Dull, Ann
...
当字符串函数接受两个字符表达式,但只有一个表达式为 unichar 时, 另一个表达式将被 “提升”并在内部转换为 unichar。这种转换遵循混 合模式表达式的现有规则。但是,这种转换可能会导致截断,因为 unichar 数据有时要占用两倍空间。
若要并置非字符表达式或非二进制列,请使用 convert 函数。例如:
select "The due date is " + convert(varchar(30), pubdate)
from titles
---------------------------------------
The due date is Jun 12 2006 12:00AM
Adaptive Server 将空字符串 (“”或 ‘’)作为单个空格求值。以下语句:
select "abc" + "" + "def"
生成:
abc def
并置运算符和 LOB 定位符
+ 和 || Transact-SQL 运算符在并置运算中将 LOB 定位符接受为表达式。 涉及一个或多个定位符的并置运算的结果是具有和输入定位符引用的数 据类型相同类型的 LOB 定位符。
例如,假定 @v 和 @w 是 text 定位符变量。以下是有效的并置运算:
• select @v + @w
• select @v || "abdcef"
• select "xyz" + @w
可以嵌套字符串函数。例如,使用 substring 函数显示每位作者的姓以及 名的首字母,并在姓后加一个逗号且在名后加一个句点:请输入:
select (au_lname + "," + " " + substring(au_fname, 1, 1) + ".")
from authors
--------------------------------------------
Green, M. Straight, D. Stringer, D. MacFeather, S. Karsen, L.
若要显示标价在 $20 以上的书籍的 pub_id 和每个 title_id 的前两个字符, 请输入:
select substring(pub_id + title_id, 1, 6) from titles
-------------- 1389PC
0877PS
0877TC
字符串函数的限制
字符串函数结果被限制为不能超过 16KB。此限制与服务器的页大小无 关。在 Transact-SQL 字符串函数和字符串变量中,即使页大小只有 2KB, 文字量也可以有 16K。
当 set string_rtruncation 为 on 时,如果 insert 或 update 截断字符串,用户 就会收到错误消息。不过,如果显示的字符串被截断, Adaptive Server 不会报告错误。例如:
select replicate("a", 16383) + replicate("B", 4000)
这表明总长度为 20383,但结果字符串被限制为 16K。
Text 函数对 text、image 和 unitext 数据执行运算。使用 set textsize 选项可 限制由 select 语句检索的 text、 image 和 unitext 数据的数据量。
注释 也可以使用 @@textcolid、@@textdbid、@@textobjid、@@textptr
和 @@textsize 全局变量来处理 text、 image 和 unitext 数据。
例如,使用 textptr 函数来定位 text 列 copy,该列与 blurbs 表中的 title_id
BU7832 相关联。文本指针 (16 字节的二进制字符串)放在局部变量
@val 中,并作为参数供 readtext 命令使用。 readtext 从第二个字节开始 返回 5 个字节 (偏移为 1)。如果只想检索某列数据的一部分, readtext 命令提供了一种检索 text、 unitext 和 image 值的方法。
declare @val binary(16)
select @val = textptr(copy) from blurbs where au_id = "486-29-1786"
readtext blurbs.copy @val 1 5
textptr 将返回 16 字节的 varbinary 字符串。Sybase 建议将该字符串放在局 部变量中 (如上例所示),并通过引用来使用它。
使用前面的 declare 示例中 textptr 的另一种方法是 @@textptr 全局变量:
readtext texttest.blurb @@textptr 1 5
注释 也可以对 text、 image 和 unitext 列使用字符串函数 patindex 和
datalength。
对 unitext 列使用 readtext
可以使用 readtext 命令只检索某列数据的选定部分的 text、 unitext 和 image 值。 readtext 需要表和列的名称、文本指针、列中的起始偏移量以 及要检索的字符或字节数。不能对视图中的 text、 unitext 或 image 列使 用 readtext。
有关对 unitext 列使用 readtext 的详细信息,请参见 《参考手册:命令》。
集合函数生成汇总值,这些值在查询结果中显示为新列。它们可以用在 select 列表或者 select 语句或子查询的 having 子句中。它们不能用于 where 子句中。
当集合函数应用于 char 数据类型的值时,会将这种值隐式转换为 varchar, 并同时去除所有尾随空白。同样, unichar 数据类型的值将隐式转换为 univarchar。
限制
• 由于查询中的每个集合都需有其各自工作表,因此,集合查询不得 超过在一个查询中允许的最多工作表数 (46)。
• 如果您在游标的 select 子句中包括了集合函数,则无法更新该游标。
• 您不能在虚拟表 (如 sysprocesses 和 syslocks)上使用集合函数。
和 group by 子句一起使用的集合函数
集合函数通常和将表划分为组的 group by 子句一起使用。集合函数为每 个组生成单个值。如果不使用 group by,那么, select 列表中的集合函数 的运算对象无论是表中的所有行还是 where 子句定义的行子集,结果都 是生成一个值。
集合函数和空值
集合函数计算特定列中非空值的汇总值。如果 ansinull 选项设置为 off
(缺省设置),则当集合函数遇到空值时就不会发出警告。如果 ansinull
设置为 on,则当集合函数遇到空值时,查询将返回以下 SQLSTATE 警告:
Warning- null value eliminated in set function
矢量和标量集合
集合函数可应用于一个表中的所有行,此时会生成单个值,即一个标量 集合。集合函数也可应用于在指定列或表达式中具有相同值的所有行
(使用 group by 或 having 子句),此时会为每个组生成一个值,亦即矢量 集合。集合函数的结果显示为新列。
可将矢量集合嵌套在标量集合中。例如:
select type, avg(price), avg(avg(price)) from titles
------------ |
------------ |
------------ |
UNDECIDED |
NULL |
15.23 |
business |
13.73 |
15.23 |
mod_cook |
11.49 |
15.23 |
popular_comp |
21.48 |
15.23 |
psychology |
13.50 |
15.23 |
trad_cook |
15.96 |
15.23 |
------------ |
------------ |
------------ |
UNDECIDED |
NULL |
15.23 |
business |
13.73 |
15.23 |
mod_cook |
11.49 |
15.23 |
popular_comp |
21.48 |
15.23 |
psychology |
13.50 |
15.23 |
trad_cook |
15.96 |
15.23 |
group by type type
(6 rows affected)
group by 子句应用于矢量集合,在本例中为 avg(price) 。标量集合 avg(avg(price)) 是 titles 表中按类型计算的平均价格的平均值。
在标准 SQL 中,如果 select 列表包括集合,则必须对所有 select 列表列 应用集合函数,或者将所有这些列都加入 group by 列表中。Transact-SQL 没有这种限制。
示例 1 显示了有标准限制的 select 语句。 示例 2 显示了相同的语句,只 是 select 列表中又添加了一项 ( title_id )。选择列表中还添加了 order by 以 说明显示上的差异。 having 子句也可引用这些 “额外”列。
示例 1 select type, avg(price), avg(advance) from titles
------------ |
------------ |
------------ |
UNDECIDED |
NULL |
NULL |
business |
13.73 |
6,281.25 |
mod_cook |
11.49 |
7,500.00 |
popular_comp |
21.48 |
7,500.00 |
psychology |
13.50 |
4,255.00 |
trad_cook |
15.96 |
6,333.33 |
------------ |
------------ |
------------ |
UNDECIDED |
NULL |
NULL |
business |
13.73 |
6,281.25 |
mod_cook |
11.49 |
7,500.00 |
popular_comp |
21.48 |
7,500.00 |
psychology |
13.50 |
4,255.00 |
trad_cook |
15.96 |
6,333.33 |
group by type type
示例 2 您可在 group by 后使用列名或任何其它表达式 (列标题或别名除外)。
group by 列中的空值放置在单个组中。
select type, title_id, avg(price), avg(advance) from titles
group by type order by type
type |
title_id |
||
----------- |
-------- |
---------- |
--------- |
UNDECIDED |
MC3026 |
NULL |
NULL |
business |
BU1032 |
13.73 |
6,281.25 |
business |
BU1111 |
13.73 |
6,281.25 |
business |
BU2075 |
13.73 |
6,281.25 |
business |
BU7832 |
13.73 |
6,281.25 |
mod_cook |
MC2222 |
11.49 |
7,500.00 |
mod_cook |
MC3021 |
11.49 |
7,500.00 |
popular_comp |
PC1035 |
21.48 |
7,500.00 |
popular_comp |
PC8888 |
21.48 |
7,500.00 |
popular_comp |
PC9999 |
21.48 |
7,500.00 |
psychology |
PS1372 |
13.50 |
4,255.00 |
psychology |
PS2091 |
13.50 |
4,255.00 |
psychology |
PS2106 |
13.50 |
4,255.00 |
psychology |
PS3333 |
13.50 |
4,255.00 |
psychology |
PS7777 |
13.50 |
4,255.00 |
trad_cook |
TC3218 |
15.96 |
6,333.33 |
trad_cook |
TC4203 |
15.96 |
6,333.33 |
trad_cook |
TC7777 |
15.96 |
6,333.33 |
示例 3 select 语句中的 compute clause 使用行集合来生成汇总值。使用行集合, 用一个命令就可检索明细行和汇总行。 示例 3 对此功能做了说明:
select type, title_id, price, advance from titles
where type = "psychology" order by type
compute sum(price), sum(advance) by type
type title_id price advance
----------- ------- ---------- ---------
psychology PS1372 21.59 7,000.00
psychology PS2091 10.95 2,275.00
psychology PS2106 7.00 6,000.00
psychology PS3333 19.99 2,000.00
psychology PS7777 7.99 4,000.00 sum sum
------- ---------- 67.52 21,275.00
请注意, 示例 3 和无 compute 的示例 (即 示例 1 和 示例 2)在输出上的 差异。
行集合函数生成汇总值,这些值在查询结果中显示为附加列。 要将集合函数用作行集合,可使用:
Start of select statement
compute row_aggregate(column_name)
[, row_aggregate(column_name)]... [by column_name [, column_name]...]
• column_name — 是列名,必须用小括号括起。只有精确数值、近似 数值和货币列可以同 sum 及 avg 一起使用。
一个 compute clause 可将同一函数应用于若干列。使用多个函数时, 要使用多个 compute clause。
• by — 表示将为子群计算行集合值。只要 by 项的值发生变化,就会 生成行集合值。如果使用 by,就必须使用 order by。
在 by 后列出多个项可将一个组分为多个子群并在每个分组级别应用 一个函数。
使用行集合,用一个命令就可检索明细行和汇总行。但是,集合函数通 常为表中的所有选定行或每个组生成一个值,这些摘要值将显示为新列。
以下示例说明了这些差异:
select type, sum(price), sum(advance) from titles
where type like "%cook" group by type
type
---------- |
---------- |
---------------- |
mod_cook |
22.98 |
15,000.00 |
trad_cook |
47.89 |
19,000.00 |
(2 rows affected)
select type, price, advance from titles
where type like "%cook" order by type
compute sum(price), sum(advance) by type
type |
price |
advance |
---------- |
---------- |
---------------- |
mod_cook |
2.99 |
15,000.00 |
mod_cook |
19.99 |
0.00 |
sum |
sum |
|
---------- |
---------------- |
|
22.98 |
15,000.00 |
|
type |
price |
advance |
---------- |
---------- |
---------------- |
trad_cook |
11.95 |
4,000.00 |
trad_cook |
14.99 |
8,000.00 |
trad_cook |
20.95 |
7,000.00 |
sum |
sum |
|
---------- |
---------------- |
|
47.89 |
19,000.00 |
(7 rows affected)
type price advance
---------- ---------- ----------------
mod_cook 2.99 15,000.00
mod_cook 19.99 0.00
Compute Result:
---------------------- -----------------
22.98 15,000.00
type price advance
---------- |
---------- |
---------------- |
trad_cook |
11.95 |
4,000.00 |
trad_cook |
14.99 |
8,000.00 |
trad_cook |
20.95 |
7,000.00 |
Compute Result:
---------------------- -----------------
47.89 19,000.00
(7 rows affected)
compute clause 中的列必须出现在 select 列表中。
select 列表中列的顺序将替换 compute clause 中集合的顺序。例如:
create table t1 (a int, b int, c int null) insert t1 values(1,5,8)
insert t1 values(2,6,9) (1 row affected)
compute sum(c), max(b), min(a) select a, b, c from t1
a b c
----------- ----------- ----------- 1 5 8
2 6 9
Compute Result:
----------- ----------- ----------- 1 6 17
如果 ansinull 选项设置为 off (缺省设置),则当行集合遇到空值时就不 会发出警告。如果 ansinull 设置为 on,则当行集合遇到空值时,查询将 返回以下 SQLSTATE 警告:
Warning - null value eliminated in set function
您不能将同一语句中的 select into 用作 compute clause,因为无法在结果 表中存储 compute 子句的输出。
统计集合函数允许对数值数据进行统计分析。另请参见 第 472 页的 “集合函数”。
这些函数都是真正的集合函数,因为它们可以计算查询的 group by 子句 确定的一组行的值。如同其它基本集合函数 (例如 max 或 min)一样, 它们在计算时会忽略输入中的空值。此外,无论是否正在分析表达式的 域,所有方差和标准偏差的计算都使用电气与电子工程师协会 (IEEE) 精度浮点标准。
如果对任何方差或标准偏差函数的输入为空集,则每个函数都将返回空 值。如果对任何方差或标准偏差函数的输入为单个值,则每个函数都将 返回 0。
统计集合函数类似于 avg 集合函数,原因如下:
• 语法为:
statistical_agg_function_name ([all | distinct] expression)
• 只有包含数值数据类型的表达式是有效的。
• Null 值不参与计算。
• 仅当没有数据参与计算时,结果才为 NULL。
• distinct 或 all 子句可以位于表达式之前 (缺省为 all)。
• 可以将统计集合用作矢量集合 (使用 group by)和标量集合 (不使 用 group by),或用于 compute 子句。
然而,与 avg 集合函数不同的是,统计集合的结果如下:
• 始终为 float 数据类型 (即,双精度浮点),然而对于 avg 集合,结 果的数据类型与表达式的数据类型相同 (存在例外)。
• 0.0 表示单个数据点。
用于计算标准偏差的公式
请参见 《参考手册:块》中的 stddev_samp、 stddev_pop var_samp 和
var_pop 参考页,以了解 Adaptive Server 用来定义方差和标准偏差的公式。
这些函数相似,但用途不同:
• var_samp 和 stddev_samp — 在希望对样本求值时使用,样本是总体 的一个子集,作为整个总体的代表。
• var_pop 和 stddev_pop — 在拥有总体的全部可用数据时使用,或在 n
值太大,以致于 n 和 n-1 之间的差异可忽略不计时使用。
每种函数还可接受隐式地转换为指定类型的参数。例如,接受近似数值 类型的函数还可接受整数类型。 Adaptive Server 会将参数转换成所需类 型。请参见 第 490 页的 “转换错误处理 ”。
Adaptive Server 提供错误陷阱来处理域错误或范围错误。使用 arithabort
和 arithignore 函数可指定处理域错误的方法。
表 16-1 显示了使用 floor、 ceiling 和 round 数学函数的示例。
表 16-1:数学函数的示例
语句 |
结果 |
select floor(123) |
123 |
select floor(123.45) |
123.000000 |
select floor(1.2345E2) |
123.000000 |
select floor(-123.45) |
-124.000000 |
select floor(-1.2345E2) |
-124.000000 |
select floor($123.45) |
123.00 |
select ceiling(123.45) |
124.000000 |
select ceiling(-123.45) |
-123.000000 |
select ceiling(1.2345E2) |
124.000000 |
select ceiling(-1.2345E2) |
-123.000000 |
select ceiling($123.45) |
124.00 |
select round(123.4545, 2) |
123.4500 |
select round(123.45, -2) |
100.00 |
select round(1.2345E2, 2) |
123.450000 |
select round(1.2345E2, -2) |
100.000000 |
日期函数执行算术运算并显示有关 datetime、 bigtime、 bigdatetime、 smalldatetime、 date 和 time 值的信息。可以在 select 列表或查询的 where 子句中使用它们。
datetime 数据类型用于 1753 年 1 月 1 日以后的值; date 用于 0001 年 1 月
1 日至 9999 年 1 月 1 日之间的日期。使用双引号或单引号将日期值括起 来。 Adaptive Server 可识别许多不同日期格式。有关数据类型详细信息, 请参见 《参考手册:构件块》。
以下是缺省显示格式:
Apr 15 2010 10:23PM
每个日期都分成多个分量,各分量具有可由 Adaptive Server 识别的缩写。 表 16-2 列出了每个日期分量、其缩写 (如果有)和该日期分量可能的 整数值。
表 16-2:日期分量
值 |
||
year |
yy |
1753 – 9999 (datetime) 1900 – 2079 (smalldatetime) |
1 – 4 |
||
1 – 12 |
||
1 – 54 |
||
1 – 31 |
||
1 – 366 |
||
1 – 7 (星期日–星期六) |
||
0 – 23 |
||
0 – 59 |
||
0 – 59 |
||
millisecond |
ms |
0 – 999 |
microsecond |
us |
0 – 999999 |
例如,使用 datediff 函数计算指定的两个日期的第一个和第二个之间日 期分量的时间。其结果是带符号的整数值 (以日期分量表示),它等于 date2 - date1。
以下查询查找 pubdate 和 2010 年 11 月 30 日之间的天数:
select pubdate, newdate = datediff(day, pubdate, "Nov 30 2010")
from titles
pubdate newdate
------------------------ ---------------
Jun |
12 |
2006 |
12:00AM |
1632 |
Jun |
9 |
2005 |
12:00AM |
2000 |
Jun |
30 |
2005 |
12:00AM |
1979 |
Jun |
22 |
2004 |
12:00AM |
2352 |
Jun |
9 |
2006 |
12:00AM |
1635 |
Jun |
15 |
2004 |
12:00AM |
2356 |
... |
使用 dateadd 函数可向指定的日期添加间隔 (指定为整数)。例如,如 果 titles 表中所有书的出版日期都延期 3 天,则可以使用以下语句获得新 的出版日期:
select dateadd(day, 3, pubdate) from titles
---------------------
Jun |
15 |
2006 |
12:00AM |
Jun |
12 |
2005 |
12:00AM |
Jul |
3 |
2005 |
12:00AM |
Jun |
25 |
2004 |
12:00AM |
Jun |
12 |
2006 |
12:00AM |
Jun |
21 |
2004 |
12:00AM |
... |
数据类型转换将表达式从一种数据类型更改为另一种数据类型,并为
date 和 time 信息指定新的显示格式。
Adaptive Server 执行某些叫做隐式转换的数据类型转换。例如,如果比 较 char 表达式和 datetime 表达式,或比较 smallint 表达式和 int 表达式, 或比较具有不同长度的 char 表达式, Adaptive Server 就会自动将一种数 据类型转换为另一种数据类型。
对于其它叫做显式转换的转换,必须使用一种数据类型转换函数来进行 数据类型转换。例如,在并置数值表达式之前,必须将其转换为字符表 达式。如果尝试显式将 date 转换为 datetime,并且该值不在诸如“Jan 1, 1000”之类的 datetime 范围内,将不允许这样的转换,并且显示错误消 息。请参见 第 484 页的 “对显式转换使用转换函数 ”。
某些数据类型转换是不允许的,无论隐式还是显式。例如,不能将 smallint 或 binary 数据转换为 datetime 。 表 16- 3 和 表 16-4 显示了各种数据 类型转换是隐式执行、显式执行,还是表中根本不支持。
• E — 需要进行显式数据类型转换。
• I — 转换可以是显式的,也可以是隐式的。
• U — 不允许进行数据类型转换。
表 16-3:显式、隐式和不支持的数据类型转换
原数据类型 |
binary |
varbinary |
bit |
[n]char |
[n]varchar |
datetime |
smalldatetime |
bigdatetime |
bigtime |
tinyint |
smallint |
unsigned smallint |
int |
unsigned int |
binary |
– |
I |
I |
I |
I |
U |
U |
I |
I |
I |
I |
I |
I |
I |
varbinary |
I |
– |
I |
I |
I |
U |
U |
I |
I |
I |
I |
I |
I |
I |
bit |
I |
I |
– |
I |
I |
U |
U |
U |
U |
I |
I |
I |
I |
I |
[n]char |
I |
I |
E |
– |
I |
I |
I |
I |
I |
E |
E |
E |
E |
E |
[n]varchar |
I |
I |
E |
I |
– |
I |
I |
I |
I |
E |
E |
E |
E |
E |
datetime |
I |
I |
U |
I |
I |
– |
I |
I |
I |
U |
U |
U |
U |
U |
smalldatetime |
I |
I |
U |
I |
I |
I |
– |
I |
I |
U |
U |
U |
U |
U |
bigdatetime |
I |
I |
U |
I |
I |
I |
I |
- |
I |
U |
U |
U |
U |
U |
bigtime |
I |
I |
U |
I |
I |
I |
I |
I |
- |
U |
U |
U |
U |
U |
tinyint |
I |
I |
I |
E |
E |
U |
U |
U |
U |
– |
I |
I |
I |
I |
smallint |
I |
I |
I |
E |
E |
U |
U |
U |
U |
I |
– |
I |
I |
I |
unsigned smallint |
I |
I |
I |
E |
E |
U |
U |
U |
U |
I |
I |
– |
I |
I |
int |
I |
I |
I |
E |
E |
U |
U |
U |
U |
I |
I |
I |
– |
I |
unsigned int |
I |
I |
I |
E |
E |
U |
U |
U |
U |
I |
I |
I |
I |
– |
bigint |
I |
I |
I |
E |
E |
U |
U |
U |
U |
I |
I |
I |
I |
I |
unsigned bigint |
I |
I |
I |
E |
E |
U |
U |
U |
I |
I |
I |
I |
I |
|
decimal |
I |
I |
I |
E |
E |
U |
U |
U |
U |
I |
I |
I |
I |
I |
numeric |
I |
I |
I |
E |
E |
U |
U |
U |
U |
I |
I |
I |
I |
I |
float |
I |
I |
I |
E |
E |
U |
U |
U |
U |
I |
I |
I |
I |
I |
real |
I |
I |
I |
E |
E |
U |
U |
U |
U |
I |
I |
I |
I |
I |
money |
I |
I |
I |
I |
I |
U |
U |
U |
U |
I |
I |
I |
I |
I |
smallmoney |
I |
I |
I |
I |
I |
U |
U |
U |
U |
I |
I |
I |
I |
I |
text |
U |
U |
U |
E |
E |
U |
U |
U |
U |
U |
U |
U |
U |
U |
unitext |
E |
E |
E |
E |
E |
U |
U |
U |
U |
U |
U |
U |
U |
U |
image |
E |
E |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
unichar |
I |
I |
E |
I |
I |
I |
I |
I |
I |
E |
E |
E |
E |
E |
univarchar |
I |
I |
E |
I |
I |
I |
I |
I |
I |
E |
E |
E |
E |
E |
date |
I |
I |
U |
I |
I |
I |
U |
I |
U |
U |
U |
U |
U |
U |
time |
I |
I |
U |
I |
I |
I |
U |
I |
I |
U |
U |
U |
U |
U |
表 16-4:显式、隐式和不支持的数据类型转换
原数据类型 |
bigint |
unsigned bigint |
decimal |
numeric |
float |
real |
money |
smallmoney |
text |
unitext |
image |
unichar |
univarchar |
date |
time |
binary |
I |
I |
I |
I |
I |
I |
I |
I |
U |
I |
I |
I |
I |
I |
I |
varbinary |
I |
I |
I |
I |
I |
I |
I |
I |
U |
I |
I |
I |
I |
I |
I |
bit |
I |
I |
I |
I |
I |
I |
I |
I |
U |
U |
U |
E |
E |
U |
U |
[n]char |
E |
E |
E |
E |
E |
E |
E |
E |
I |
I |
I |
I |
I |
I |
I |
[n]varchar |
E |
E |
E |
E |
E |
E |
E |
E |
I |
I |
I |
I |
I |
I |
I |
datetime |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
I |
I |
I |
I |
smalldatetime |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
I |
I |
I |
I |
bigdatetime |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
I |
I |
I |
I |
bigtime |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
I |
I |
U |
I |
tinyint |
I |
I |
I |
I |
I |
I |
I |
I |
U |
U |
U |
E |
E |
U |
U |
smallint |
I |
I |
I |
I |
I |
I |
I |
I |
U |
U |
U |
U |
E |
U |
U |
unsigned smallint |
I |
I |
I |
I |
I |
I |
I |
I |
U |
U |
U |
E |
E |
U |
U |
int |
I |
I |
I |
I |
I |
I |
I |
I |
U |
U |
U |
E |
E |
U |
U |
unsigned int |
I |
I |
I |
I |
I |
I |
I |
I |
U |
U |
U |
E |
E |
U |
U |
bigint |
– |
I |
I |
I |
I |
I |
I |
I |
U |
U |
U |
E |
E |
U |
U |
unsigned bigint |
I |
– |
I |
I |
I |
I |
I |
I |
U |
U |
U |
E |
E |
U |
U |
decimal |
I |
I |
– |
I |
I |
I |
I |
I |
U |
U |
U |
E |
E |
U |
U |
numeric |
I |
I |
I |
– |
I |
I |
I |
I |
U |
U |
U |
E |
E |
U |
U |
float |
I |
I |
I |
I |
– |
I |
I |
I |
U |
U |
U |
E |
E |
U |
U |
real |
I |
I |
I |
I |
I |
– |
I |
I |
U |
U |
U |
E |
E |
U |
U |
money |
I |
I |
I |
I |
I |
I |
– |
I |
U |
U |
U |
E |
E |
U |
U |
smallmoney |
I |
I |
I |
I |
I |
I |
I |
– |
U |
U |
U |
E |
E |
U |
U |
text |
U |
U |
U |
U |
U |
U |
U |
U |
– |
I |
U |
E |
E |
U |
U |
unitext |
U |
U |
U |
U |
U |
U |
U |
U |
I |
– |
I |
U |
U |
U |
U |
image |
U |
U |
U |
U |
U |
U |
U |
U |
U |
I |
– |
E |
E |
U |
U |
unichar |
E |
E |
E |
E |
E |
E |
E |
E |
I |
I |
I |
– |
I |
I |
I |
univarchar |
E |
E |
E |
E |
E |
E |
E |
E |
I |
I |
I |
I |
– |
I |
I |
date |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
I |
I |
– |
I |
time |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
U |
I |
I |
I |
– |
常规转换函数 convert 可在多种数据类型间进行转换,并为日期和时间 信息指定新的显示格式。其语法为:
convert(datatype [(length) | (precision[, scale])] [null | not null],
expression [, style ])
下例在 select 列表中使用 convert:
select title, convert(char(5), total_sales) from titles
where type = "trad_cook" title
------------------------------------ -----
Onions, Leeks, and Garlic:Cooking
Secrets of the Mediterranean 375
Fifty Years in Buckingham Palace
Kitchens 15096
Sushi, Anyone? 4095
(3 rows affected)
某些数据类型需要使用长度或精度和标度。如果不指定长度, Adaptive Server 将为字符和二进制数据使用缺省长度 30。如果不指定精度或标度, Adaptive Server 将分别使用缺省值 18 和 0。
数据类型转换的准则和约束
您可以将字符数据转换为非字符类型 (例如货币、日期 / 时间、精确数 值或近似数值类型),但前提是它必须全部由对于该新类型有效的字符 组成。前导空白将被忽略。但是,如果将包含一个或多个空白的 char 表 达式转换为 datetime 表达式, Adaptive Server 就会把空白转换为缺省的 datetime 值 “Jan 1, 1900”。
当数据包含无法接受的字符时,将产生语法错误。以下是一些导致语法 错误的字符的示例:
• 整数数据中的逗号或小数点
• 货币数据中的逗号
• 精确 / 近似数值数据或位流数据中的字母
• date 和 time 数据中拼错的月份名
支持在 unichar/univarchar 与 datetime/smalldatetime 之间进行隐式转换。
当从多字节字符集向单字节字符集转换时,如果字符无等值的单字节字 符,则将被转换为问号。
可以将 text 和 unitext 列显式转换为 char、 nchar、 varchar、 unichar、 univarchar 或 nvarchar。这种转换受到 character 数据类型最大长度的限 制,该长度由服务器逻辑页大小的最大列大小决定。如果未指定长度, 转换后的值将具有缺省的长度 (30 个字节)。
可将精确和近似数值数据转换为字符类型。如果新类型太短,无法容纳 整个字符串,则将生成空间不足的错误。例如,以下转换试图将 5 个字 符的字串存储在单字符类型中:
select convert(char(1), 12.34)
Insufficient result space for explicit conversion of NUMERIC value '12.34' to a CHAR field.
将 float 数据转换为字符类型时,新类型的长度至少应有 25 个字符。
注释 在进行转换时, str 函数可能比 convert 或 cast 更可取,因为它加 强了对转换的控制并可避免错误。
从 unitext 转换或转换成 unitext
可以隐式地将其它字符和二进制数据类型转换成 unitext。也可以在 unitext 和其它数据类型之间进行显式转换。但是,转换结果会受到目标 数据类型的最大长度的限制。如果 Unicode 字符边界上的目标缓冲区无
法容纳 unitext 值,则会截断数据。如果设置了 enable surrogate processing, 则决不会在值代理对的中间截断 unitext 值,这意味着在数据类型转换之 后可能会返回更少的字节。例如,如果表 tb 的 unitext 列 ut 中存储了字符
串 “U+0041U+0042U+00c2”(U+0041 表示 Unicode 字符 “A”)并且 服务器的字符集设置为 UTF-8,则下面的查询会返回值 “AB”,这是 因为 U+00C2 被转换为 2 个字节的 UTF-8 0xc382:
select convert(char(3), ut) from tb
目前,alter table modify 命令不支持将 text、image 或 unitext 列作为被修改 的列。若要从 text 迁移到 unitext 列,必须首先使用 bcp out 拷出现有数据 并创建包含 unitext 列的表,然后使用 bcp in 将数据放入新表中。只有用
-Jutf8 选项调用 bcp 时,此迁移路径才有效。
money 和 smallmoney 类型在小数点的右侧存储 4 个数字位,但为了便于 显示,它们将上舍入到最接近的百分位 (.01)。当数据转换为货币类型时, 它将上舍入到第四个小数位。
如果可能,从货币类型进行转换的数据将遵循相同的舍入规则。如果新 类型是小数位少于三的精确数值,数据就会舍入到新类型的标度。例如, 当 $4.50 转换为整数后,将得到 5:
select convert(int, $4.50)
-----------
5
转换为 money 或 smallmoney 的数据应视为完整货币单位 (如美元),而 不是辅币单位 (如美分)。例如,整数值 5 将转换为 us_english 语言中 5 美元 (而不是 5 美分)的等值货币。
转换 date 和 time 信息
可以将可识别为日期的数据转换为 datetime、 smalldatetime、 date 或 time。月份名有误将导致语法错误。超出数据类型可接受范围的日期将 导致算术溢出错误。
将 datetime 值转换为 smalldatetime 时,它们将舍入到最接近的分钟。 请参见 第 489 页的 “更改日期格式 ”。
您可以将数据从一种数字类型转换为另一种数字类型。如果新类型是精 确数值,而其精度或标度不足以容纳数据,就会发生错误。
例如,如果将浮点值或数字值作为参数提供给需要整数的内置函数,就 会截断该浮点值或数字值。不过, Adaptive Server 并不隐式地转换具有 小数部分的数字,而是返回一个标度错误消息。例如,对具有小数部分 的数字, Adaptive Server 返回错误 241,如果传递了其它数据类型,则 返回错误 257。
使用 arithabort 和 arithignore 选项可确定 Adaptive Server 处理因数字转换 而导致的错误的方法。
binary 和 varbinary 类型存储十六进制式数据,这种数据由前缀 “0x”以 及随后的数字和字母字符串组成。
不同的平台会以不同的方式来解释这些字符串。例如,字符串 “0x0000100”在认为字节 0 最重要的计算机 (小型)上代表 65536 而 在认为字节 0 不重要的计算机 (大型)上代表 256。
二进制类型向整数类型的转换可显式进行 (使用 convert 函数),该转换 也可隐式进行。如果数据对于新类型来说太短,就会删去其 “0x”前缀 并用零填充。如果数据太长,则会将其截断。
convert 和隐式数据类型转换在不同的平台上会以不同的方式对二进制数 据求值。因此,在不同平台上可能会得到不同的结果。使用 hextoint 函数 可进行与平台无关的十六进制字符串到整数的转换,而使用 inttohex 函数 可进行与平台无关的整数到十六进制值的转换。使用 hextobigint 函数可 进行与平台无关的十六进制字符串到 64 位整数的转换,而使用 biginttohex 函数可进行与平台无关的 64 位整数到十六进制值的转换。
在 binary 和 varbinary 数据字符串中,“0x”之后的前两位表示 binary 类型: “00”表示正数,“01”表示负数。将 binary 或 varbinary 类型转换为 numeric 或 decimal 时,务必要在 “0x”位后指定 “00”或 “01”值; 否则转换将失败。
例如,若要将以下 binary 数据转换为 numeric,可使用:
select convert(numeric
(38, 18),0x000000000000000006b14bd1e6eea0000000000000000000000000000000)
-- --------
123.456000
若要将同一 numeric 数据转换回 binary,可使用:
select convert(binary,convert(numeric(38, 18), 123.456))
-------------------------------------------------------------- 0x000000000000000006b14bd1e6eea0000000000000000000000000000000
可使用 convert 函数将 image 列转换为 binary 或 varbinary。这种转换受到 binary 数据类型的最大长度的限制,该长度由服务器逻辑页大小的最大 列大小决定。如果未指定长度,转换后的值将具有缺省的长度 (30 个 字符)。
将其它类型转换为 bit
精确和近似的数值型可以隐式地转换为 bit 类型。字符类型需要使用
convert 函数显式转换。
所转换的表达式必须仅包括数字、小数点、货币符号以及加号或减号。 使用其它字符会生成语法错误。
0 的 bit 等值为 0。任何其它数字的 bit 等值为 1。
转换十六进制数据
要获得跨平台可靠的转换结果,可使用 hextoint 和 inttohex 函数。 类似函数 hextobigint 和 biginttohex 可用于转换为 64 位的整数,以及从 64
位的整数进行转换。
hextoint 接受由数字和大小写字母 A – F (不论是否有前缀 “0x”)组成 的文字或变量。以下都是 hextoint 的有效用法:
select hextoint("0x00000100FFFFF") select hextoint("0x00000100") select hextoint("100")
hextoint 删去前缀 “0x”的数据。如果数据超过 8 位,则 hextoint 会截断 它。如果数据少于 8 位, hextoint 将使数据向右对齐并用零填充。这样, hextoint 将返回独立于平台的等值整数。无论执行 hextoint 函数的平台是 何种类型,上述表达式都将返回相同值 256。
inttohex 函数接受整数数据并返回没有前缀 “0x”的 8 字符十六进制字 符串。无论平台如何, inttohex 总返回相同的结果。
转换 bigtime 和 bigdatetime 数据
当精度降低导致数据丢失时,允许进行隐式和显式转换。
如果两种数据类型的主字段不匹配,那么在这两种数据类型之间进行隐 式转换可能导致数据截断、插入缺省值或产生错误消息。例如,如果将 bigdatetime 值转换为 date 值,时间部分将被截断,只留下日期部分。如 果将 bigtime 值转换为 bigdatetime 值,将在新的 bigdatetime 值中添加缺省 的日期部分 Jan 1, 0001。如果将 date 值转换为 bigdatetime 值,将在 bigdatetime 值中添加缺省的时间部分 00:00:00.000000。
转换 NULL 值
可用 convert 函数将 NULL 更改为 NOT NULL,也可将 NOT NULL 更改 为 NULL。
convert 的 style 参数提供了多种日期显示格式,可用于将 datetime 或 smalldatetime 数据转换为 char 或 varchar。作为 style 参数提供的数值参数 确定数据的显示方式。年份可以使用两个或四个数字。向 style 值添加 100 可获得 4 位的年,包括世纪 ( yyyy )。
表 16-5 显示了 style 的可能值及可用的多种日期格式。将 style 和
smalldatetime 一起使用时,包括秒或毫秒的样式将在这些位置显示零。
表的说明: “mon”表示英文拼写的月份,“mm”表示月份或分钟。 “HH”表示 24 小时制时钟值,“hh”表示 12 小时制时钟值。最后一行
(第 23 行)包含文字 “T”以分离格式中的日期部分和时间部分。
不含世纪 (yy) |
含世纪 (yyyy) |
标准 |
输出 |
- |
0 或 100 |
缺省值 |
mon dd yyyy hh:mm AM (或 PM) |
1 |
101 |
美国 |
mm/dd/yy |
2 |
2 |
SQL 标准 |
yy.mm.dd |
3 |
103 |
英语 / 法语 |
dd/mm/yy |
4 |
104 |
德语 |
dd.mm.yy |
5 |
105 |
dd-mm-yy |
|
6 |
106 |
dd mon yy |
|
7 |
107 |
mon dd, yy |
|
8 |
108 |
HH:mm:ss |
|
- |
9 或 109 |
缺省值 + 毫秒 |
mon dd yyyy hh:mm:sss AM (或 PM) |
10 |
110 |
美国 |
mm-dd-yy |
11 |
111 |
日本 |
yy/mm/dd |
12 |
112 |
ISO |
yymmdd |
13 |
113 |
yy/dd/mm |
|
14 |
114 |
mm/yy/dd |
|
15 |
115 |
dd/yy/mm |
|
- |
16 或 116 |
mon dd yyyy HH:mm:ss |
|
17 |
117 |
hh:mmAM |
|
18 |
118 |
HH:mm |
|
19 |
hh:mm:ss:zzzAM |
||
20 |
HH:mm:ss:zzz |
||
21 |
yy/mm/dd HH:mm:ss |
||
22 |
yy/mm/dd hh:mm AM (或 PM) |
||
23 |
yyyy-mm-ddTHH:mm:ss |
不含世纪 (yy) |
含世纪 (yyyy) |
标准 |
输出 |
- |
0 或 100 |
缺省值 |
mon dd yyyy hh:mm AM (或 PM) |
1 |
101 |
美国 |
mm/dd/yy |
2 |
2 |
SQL 标准 |
yy.mm.dd |
3 |
103 |
英语 / 法语 |
dd/mm/yy |
4 |
104 |
德语 |
dd.mm.yy |
5 |
105 |
dd-mm-yy |
|
6 |
106 |
dd mon yy |
|
7 |
107 |
mon dd, yy |
|
8 |
108 |
HH:mm:ss |
|
- |
9 或 109 |
缺省值 + 毫秒 |
mon dd yyyy hh:mm:sss AM (或 PM) |
10 |
110 |
美国 |
mm-dd-yy |
11 |
111 |
日本 |
yy/mm/dd |
12 |
112 |
ISO |
yymmdd |
13 |
113 |
yy/dd/mm |
|
14 |
114 |
mm/yy/dd |
|
15 |
115 |
dd/yy/mm |
|
- |
16 或 116 |
mon dd yyyy HH:mm:ss |
|
17 |
117 |
hh:mmAM |
|
18 |
118 |
HH:mm |
|
19 |
hh:mm:ss:zzzAM |
||
20 |
HH:mm:ss:zzz |
||
21 |
yy/mm/dd HH:mm:ss |
||
22 |
yy/mm/dd hh:mm AM (或 PM) |
||
23 |
yyyy-mm-ddTHH:mm:ss |
表 16-5:用 style 参数转换日期格式。
缺省值 (样式 0 或 100 以及 9 或 109)始终返回世纪 (yyyy)。
以下示例会将当前日期转换为样式 3,即 dd/mm/yy:
select convert(char(12), getdate(), 3)
在将 date 数据转换为字符类型时,使用 表 16- 5 中的样式编号 1 – 7 (101 –
107) 或 10 – 12 (110 – 112) 来指定显示格式。缺省值为 100 (mon dd yyyy hh:mi AM (或 PM))。如果 date 数据转换为包含时间部分的样式, 该时间部分将显示缺省值 0。
在将 time 数据转换为字符类型时,使用样式编号 8 或 9 (108 或 109) 来指定显示格式。缺省值为 100 (mon dd yyyy hh:mi AM (或 PM))。 如果 time 数据转换为包含日期部分的样式,将显示缺省日期 Jan 1, 1900。
注释 convert 在其 style 参数为 NULL 时返回的结果与 convert 不带 style
参数时返回的结果相同。例如:
select convert(datetime, "01/01/01")
------------
Jan 1 2001 12:00AM
select convert(datetime, "01/01/01", NULL)
------------
Jan 1 2001 12:00AM
当 Adaptive Server 试图将数字值除以零时,就会发生被零除错误。当新 类型的小数位数太少,无法容纳结果时,就会发生算术溢出错误。会发 生这些错的转换过程包括:
• 显式或隐式地转换为具有较低精度或标度的精确类型
• 显式或隐式地转换已超出货币或日期 / 时间类型可接受范围的数据
• 使用 hextoint 转换要求存储空间大于 4 个字节的十六进制字符串
无论是在隐式转换还是在显式转换中发生算术溢出和被零除错误,都是 很严重的问题。使用 arithabort arith_overflow 选项可指定 Adaptive Server 处理这些错误的方法。缺省设置为 arithabort arith_overflow on,它将回退 发生错误的整个事务。如果不包含事务的批处理发生了这种错误, arithabort arith_overflow on 将不回退批处理中以前的命令,并且 Adaptive Server 也不会执行批处理中产生错误的语句之后的语句。如果将其设置 为 arithabort arith_overflow off, Adaptive Server 将中止导致错误的语句, 但会继续处理事务或批处理中的其它语句。可以使用 @@error 全局变 量来检查语句结果。
使用 arithignore arith_overflow 选项可确定 Adaptive Server 是否在发生这些 错误后显示警告消息。缺省设置为 off,它将在发生被零除错误或精度 损失时显示警告消息。如果设置 arithignore arith_overflow on,则会取消发 生这些错误后的警告消息。忽略可选的 arith_overflow 关键字不会有任何 影响。
当显式转换导致标度损失时,将截断结果而不发出任何警告。例如,如 果将 float、numeric 或 decimal 类型显式地转换为 integer,Adaptive Server 就会认为您希望结果成为整数,从而会截断小数点右侧的所有数字。
当隐式转换为 numeric 或 decimal 类型时,标度损失将产生标度错误。使 用 arithabort numeric_truncation 选项可确定这种错误的严重程度。缺省设 置 arithabort numeric_truncation on 将中止导致错误的语句,但会继续处理 事务或批处理中的其它语句。如果设置了 arithabort numeric_truncation off, Adaptive Server 就会截断查询结果并继续进行处理。
注释 为符合初级的 ANSI SQL,请设置:
• arithabort arith_overflow off
• arithabort numeric_truncation on
• arithignore off
当 convert 函数的参数超出其定义范围时,该函数就会产生域错误。这 种错误极少发生。
安全性函数返回有关安全服务和用户定义的角色的信息。 有关管理用户权限的信息,请参见 《安全性管理指南》。
XML 函数
XML 函数能让您在 Adaptive Server 数据库中管理 XML。 XML 函数在
《XML 服务》一书中介绍。
Sybase SQL Anywhere数据库恢复工具ReadASADB:
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具: ReadASADB。此工具支持ASA v5.0, v6.0, v7.0, v8.0, v9.0, v10.0, v11.0, v12.0, v16.0, v17.0等版本。
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具。
恢复Sybase SQL Anywhere的工具在国内处于领先水平。
Sybase SQL Anywhere数据库恢复工具ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具
- 适用于所有的SQL Anywhere版本 包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x,16.x,17.x
- 适用于所有的UltraLite版本
- 能够恢复出来表结构和数据
- 能够恢复自定义数据类型
- 能够恢复存储过程等对象的语法
- 能够导出到目标数据库
- 能够导出到SQL文件并生成导入脚本
- 支持多种字符集,包括:cp850、cp936、gb18030、utf8等
- 能够恢复未加密或者简单加密类型的数据
- 简单易用
- 限制:不支持AES加密的数据文件
SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍
Sybase SQL Anywhere数据库恢复工具ReadASADB适用场景
各种误操作:
- 误截断表(truncate table)
- 误删除表(drop table)
- 错误的where条件误删数据
- 误删除db或log文件
- 误删除表中的字段
Sybase SQL Anywhere数据库恢复工具ReadASADB的应用场景:
1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page
7、*** ERROR *** Assertion failed: 201417 (7.0.4.3541) Invalid count or free space offset detected on a table page
8、Internal database error *** ERROR *** Assertion failed: 201425 (8.0.3.5594) Invalid count or free space offset detected on a free list page -- transaction rolled back.
9、Internal database error *** ERROR *** Assertion failed: 100702 (8.0.1.2600) Unable to modify indexes for a row referenced in rollback log -- transaction rolled back
Sybase ASE数据库恢复工具READSYBDEVICE:
一个不依赖数据库管理系统、直接从Sybase数据库设备文件上提取数据的业内领先的恢复工具!能够从损坏的Sybase ASE设备文件(.dat)上提取数据的非常规恢复工具。
Sybase ASE数据库恢复工具READSYBDEVICE的主要功能:
- 被勒索病毒加密数据文件及备份文件情况下的恢复;
- 系统崩溃只剩下数据文件的情况下的恢复,甚至数据库文件不存在而只有损坏的备份文件情况下的恢复;
- 因断电、硬盘坏道等造成数据库文件损坏情况下的恢复;
- delete数据恢复、误update数据恢复、误删除表(drop)恢复、误truncate表恢复 等;
- 各种Sybase内部系统表损坏、索引错误的修复;
- master数据库损坏而无法正常运行情况下的恢复;
- Sybase数据库被标记为可疑,不可用等情况的恢复;
- Sybase数据库中数据文件内部出现坏块情况下的恢复;
- Sybase数据库无数据文件但有日志文件的情况下的恢复;
- Sybase数据库只有数据文件无任何日志文件的情况下的恢复;
- Sybase数据文件被误删除情况下的碎片提取恢复;
- 磁盘阵列上的Sybase数据库被误格式化情况下的数据库恢复;
- 数据库sysobjects等系统表损坏无法正常应用情况下的恢复;
- Sybase数据库还原数据库出现失败情况下的恢复;
- Sybase数据库只剩下损坏的备份文件情况下的恢复。
Sybase ASE数据库恢复工具READSYBDEVICE支持的版本:
Sybase ASE 11.0.x,11.5.x,11.9.x,12.0.x,12.5.x,15.0.x,15.5.x,15.7.x,16.0.xSQL Server数据库恢复工具SQLRescue:
一个不依赖数据库管理系统、直接从SQL Server数据库文件上提取数据的业内领先的恢复工具!能够从损坏的SQL Server数据库文件(.mdf)上提取数据的非常规恢复工具。
SQL Server数据库恢复工具SQLRescue的主要功能:
- 系统崩溃只剩下数据文件的情况下的恢复,即无日志文件或者日志文件损坏情况下的恢复;
- 断电导致数据库文件损坏情况下的恢复;
- 硬盘坏道造成数据库损坏情况下的恢复;
- 数据文件内部存在坏页情况下的恢复;
- 企业管理器误删除数据表记录,管理软件误删除数据表记录的恢复;
- 并闩锁错误、格式化、误删除后导致软件不能使用的情况;
- 无法读取并闩锁页sysindexes失败情况下的修复;
- 数据文件被误删除情况下的碎片提取恢复;
- 系统表损坏、索引错误、误删除数据库表、删除记录的数据找回;
- master数据库损坏而无法正常运行情况下的恢复;
- 数据文件无法附加情况下的数据恢复;
- 数据库被标记为可疑,质疑,不可用等情况的恢复;
- 数据库sysobjects等系统表损坏情况下的恢复;
- 数据被误(drop、delete、truncate)删除表数据的恢复,误update后的数据恢复等;
- 还原时报一致性错误,错误823等情况下的数据恢复,各种错误提示的数据库文件修复;
- 数据库被误格式化等情况下的数据库恢复;
- 日志收缩造成数据库损坏情况下的恢复;
- 仅剩损坏的备份文件情况下的恢复。
SQL Server数据库恢复工具SQLRescue技术特点:
只要SQL Server数据库的数据文件存在,我们就有办法帮您从数据文件中找回重要数据。- 从数据文件中直接恢复数据
- 不能附加时直接恢复数据并生成新的数据库
- 系统表损坏的数据库修复
- 快速修复SQL 823错误、连接中断错误
SQL Server数据库恢复工具SQLRescue支持的版本:
Microsoft SQL Server 7.0, 2000, 2005, 2008, 2008R2, 2012, 2014, 2016, 2017,2019。+-------------------------------------华丽的分割线-------------------------------------------------------------------------