sybase函数学习(一)

ASCII 返回表达式中第一个字符的ASCII代码。

如:select ASCII(‘Bennet’) 结果:66

select ASCII(‘B’) 结果:66

 

distinct是在应用avg之前取消重复值。Distinct是可选。当应用于group by子句时,集合函数将为每个组(而非整个表)生成一个值。

eg :将titles表按出版商分组,并且只包括那些预付款总额超过25000且书籍平均价格高于15的出版商所形成的组。

select  id,sum(advance) , avg(price) from titles

group by id

having sum(advance) > 25000 and avg(price) >15

 

having与where类似,可用来决定选择哪个记录。在使用group by对这些记录分组后,having会决定应显示的记录。

 

char 返回整数的等值字符。他将单字节整数值转换为字符值(char通常用作ASCII的倒数)

 

charindex 返回表示表达式起始位置的整数。

返回表company的列address中‘start’的起始位置。

eg:selectcharindex(“start”,address) from company where company_id = 57

 

char_length  返回表达式中字符的数量。对于可变长度的列和变量,它将返回字符的个数(包括尾部的空格);对于文字和固定长度的字符列和变量,就是声明的长度。所以一般我们要求字符串的长度,最后不要用这个。

 

col_length 返回已定义的列的长度。如:返回表tablename 的title列的长度,selectcol_length(‘tablename’,’title’)

注意:对text和image,numeric列比较特殊。

 

col_name 返回已指定ID和列ID的列的名称,通俗点就是得到列名。

sybase函数学习(二)

1.compare

 

2.convert 

 

3.count

其中distinct是在应用count前取消重复值。

eg:查找作者居住的不同城市的数量:

select count(distinct city)

 

eg:列出titles表中的类型,但取消只包含一本书或不包含任何书的类型:

select type  fromtitles group by type having count(*)>1

 

count(*)是返回行数,用的最多。

 

4.current_date()

eg: select current_date()

eg: 用datename标识当前日期

select datename(month,current_date())

结果:August

注意:结果不是8

 

eg:用datepart标识当前日期

select datepart(month,current_date())

结果:8

 

5.current_time()

eg: select current_time()

eg: 返回当前时间的分钟

select datename(minute,current_time())

 

6.curunreservedpas

Curunreservedpgs(dbid,istart,unreservedpgs)

dbid是数据库的ID,它们存储在sysdatabases的dbid字段。

Istart是要返回的页所在磁盘区段中的一页。

Unreservedpgs是在dbtable当前对于所请求的数据库不可用时返回的缺省值。

 

eg: 返回数据库名称、设备名和每个设备区段中的未保留页数。

select db_name(dbid),d.name,curunreservedpgs(dbid,1,unreservedpgs)

from sysusages u ,sysdevices d where d.low<=u.size+vstart

and d.high>=u.size+vstart - 1

and d.status &2 = 2

 

eg:显示从sysusages.istart开始的dbid段上的可用页数;

select curunreservedpgs(dbid, sysusages.istart,0)

实例化:select curunreservedpgs(6,1,0)

sybase函数学习(三)

1.datalength

select datalength('a11中国')  结果为7

select datalength('a11 ')  结果为3

注意:结果是以字节表示

2.dateadd

Dateadd(date_part,integer, date expression)

如:titles表中所有书的出版日期推迟21天

Select  newpubdate= dateadd(day,21,pubdate)

向日期前添加一天

Select dateadd(dd,1,”apr 12,9999”)

向时间添加5分钟

Select dateadd(mi,5,convert(time,”14:20:00”))

 

Select dateadd(hh,23,”4/1/1979”)

 

3.datediff

这个日期的差值可能是小时,天,年等。

 

4.datename 以字符串的形式返回指定date或time的指定部分。

Select datename(month,getdate()) 结果November

 

5.datapart

Select datapart (month,getdate())  结果 4

 

6.day

Select day(‘11/02/03’) 结果 2

 

7.db_id

Select db_id(‘pub’) 返回pub数据库的id

Select db_id()  当前数据库的ID

sybase函数学习(四)

1. db_name

它和db_id正好相反

例如:select db_name()     当前数据库的名称

      Select db_name(4)   ID为4的数据库的名称

 

2.floor

例如:select floor(123.24)  结果:123

          Select floor(-123.24)   结果:-124

          Select floor($123.45)  结果:123.00

注意:对于数字和小数表达式,其结果的精度与该表达式的精度相同,标度为0

 

3. getdate 返回当前系统日期和时间

例如:select getdate() 结果:当前日期,包括日期和时间

           Select datepart(month,getdate()) 结果:12

           Selectdatename(month,getdate()) 结果:December

 

4.host_id

host_name

例如:select host_name(),host_id()

结果:ylzhang,1365

Ylzhang是计算机名,1365是Adaptive Server客户端进程的进程ID

 

5.identity_burn_max

例如:select  identity_burn_max(‘tablename’)

注意:返回的是自增列的最大ID,如果这个表没有自增列,则返回为null

 

6.index_col

7.index_clolrder

 

8.isnull 

例如:select isnull(name,’zhang’) from titles 结果:name列为null值的替换为zhang

 

9.is_sec_service_on

is_sec_service_on(sevurity_service_nm)

其中:sevurity_service_nm是安全服务的名称。

查找安全服务的有效名称,用select * from syssecmechs

例如:select is_sec_service_on(“unifiedlogin”)

 

10.left

left(character_expression,integer_expression)

例如:select left(‘123456789’,5) 结果:12345

              select left(‘123 456789’,5) 结果:123 4

返回名字的前5个字符,select  left(name,5) from user

 

11.len

len(string_expression)

例如:select  len(‘中国’) 结果:2

注意: char_length,char,len之间的区别

 

12.lower

例如:select  lower(‘12FEC张’)  结果:12fec张

 

13.ltrim

例如:select ltrim(‘  aa’)       结果:aa

select ltrim(‘aa  ’)+’cc’   结果:aa  cc

select ltrim(‘a  a’)       结果: a  a

注意:只删去了前导空白

 

14.max 和 min

例如:select max(price) from computer

              select min(price) from computer

 

15.month

例如:select month(getdate()) 结果:12

同理: select day(getdate())   结果:15

year(getdate())   结果:2006

 

16.mut_excl_roles

mut_excl_roles是一个系统函数。如果系统安全员将role1定义为与role2互斥的角色,或直接有role2所包含的角色,则mut_excl_roles返回1,如果不是则返回0。

 

17.newid

Newid([optionflag])

例如:select newid()

select newid(0)

select newid(0x0)

select newid(1)

 

可以通过newid()来参数随机器数

Select id  from  tablename order by newid()

这时你会发现,每次执行,排序都不一样。

 

18. next_identity

Next_identity(tablename)

例如:select next_identity(‘tbl_zone’)  结果:返回tbl_zone表中下一个要自增的id

注意:如果这个表不是自增,则返回null

 

19.object_id

Obeject_di(object_name)

object_name是数据库对象(表、视图、过程、触发器、缺省值或规则)的名称。

例如:select object_id(‘TBL_ZONE’)  结果:437573566

同样 selectobject_name(437573566)   结果:TBL_ZONE

注意:对象ID存储在sysobjects的ID列中。

sybase函数学习(五)

1.pi 返回常量3.1415926535897936。

例如:select pi()

注意:一般计算圆的时候用。

 

2.power 返回求指定数字的给定次幂所得的值。

Power(value,power)

例如:select power(2,4)

         select power(3,0)  结果:1

 

3.proc_role

例如:检查用户是否已被授予系统安全员角色:

Select proc_role(‘sso_role’)

检查用户是否已被授予系统安全员角色:

Select proc_role(‘oper_role’)

 

4.rand

例如:select rand()

 

5.replicate

Replicate(char_expr|uchar_expr,integer_expr)

例如:select replicate(‘ab’,3)  结果:ababab

 

6.reverse

Reverse(expression|uchar_expr)

例如:select  reverse(‘我的电脑’) 结果:脑电的我

 

7.right 返回表达式最右边具有指定字符数的部分。

Right(expression,integer_expr)

例如:select right(‘abcdefj’,3)  结果:efj

 

8.role_contain

role_contain(‘role1’,’role2’)

 

9.role_id

role_name  返回已指定系统角色ID的角色名称

role_id(‘role_name’)

role_ name’(role_id)

例如:返还sa_role的系统角色ID

Select  role_id(‘sa_role’)  结果:0

Select  role_name(0)  结果:sa_role

 

10.round

round(number,integer)

例如:select round(123.4545,2)  结果:123.4500

         Select round(123.45,-2)   结果:100.00

         Selectround(123.506,2)    结果:123.510

注意:如果integer为负数且超过number的有效数,则为0

 

11.rtrim 

Select rtrim(char_expr|uchar_expr)

例如:select rtrim(‘ aa’)    结果: aa

selectrtrim(‘  aa ’)  结果:  aa

select rtrim(‘a  a  ’)      结果:a  a

注意:它只删去末尾的空白,其他的不会删去

 

12.show_role

例如:select show_role()

 

13.show_sec_services

例如:select show_sec_services()

注意:如果没有,则为null

 

14.sign 

Sign(numeric)

例如:select sign(123)  结果:1

         select sign(0)  结果:0

         select sign(-123)  结果:-1

 

15.sin返回指定角的正弦。

例如:select  sin(45)

 

16.space

Space

例如:select “aa”+space(5)+”dd”  结果:aa     dd

 

17.square 

Square(numeric)

例如:select square(price) from titles

Select square(5)  结果:25.0

注意:次函数等同于power(muneric_expr,2),但是它返回float类型而不返回int类型。

 

18.sqrt 返回指定数字的平方根。

例如:select sqrt(100)  结果:10

sybase函数学习(六)

1.str

Str(approx_numeic[,length[,decimal]]).

例如:select str(125.36 , 5,2) 结果为125.3

125.36是数字

5是位数,小数点也算

2是小数点后面的位数,默认为0

注意:位数和小数点后面的位数的规律,试试就明白了。

 

2.str_replace

例如:select str_replace(‘aaabbbccc’,’bb’,’mm’)  结果:aaammbccc

 

3.stuff 

例如:select stuff(‘abcdefg’,2,3,’mm’)  结果:ammefg

2 是开始删除字符的位置

3是删除字符数

mm是替代

如:select stuff(‘ssssss’,2,3,null)

select stuff(‘ssssss’,2,3,’’)

 

4.substring

Substring(expression,start,length)

例如: select substring(‘abcdef’,1,3)  结果:abc

 

5.sum 返回值的总和

Sum([all|distinct] expression)

注意: distinct在这里的用法

 

6.suser_id

suser_name  从syslogins表中返回服务器用户的名称

Suser_id([server_user_name])

例如:select suser_id()

或  selectsuser_id(‘lei’)

select suser_name()

或 select suser_name(4)

 

7.syb_quit

例如:终止在其中执行该函数且返回错误消息的连接.

Select syb_quit()

 

8.tempdb_id

 

9.upper

例如:select upper(‘ab’)  结果: AB

 

10.used_pgs

 

11.user 

例如:select  user  结果:dbo

 

12.user_id

user_name 返回数据库中指定用户或当前用户的名称.

例如:select user_id()

或select user_id(‘lei’)

或select user_name()

或select user_name(4)

 

13.valid_name

 

14.vaild_user

例如:select valid_user(4) 

 

15.year

例如:select year(‘12/20/2006’)  结果:2006

sybase函数学习(七)

1.将两个字符串并置,用+

例如:select  '神秘'+'狭'    结果:神秘狭

 

2.between……and

例如:  ……wherecolumn1 between 5 and  100

 

3.1+null   结果:null

 

4.expression is null等效expression=null

expression is not  null等效expression!=null

 

5.要让一个字符串延续到屏幕的下一行,可用\

 

6.临时表以#开头.

例如:create table #zone(zone_id int)

 

7.如果是关键字,就不能用于表名或列名,必须用分隔标识符(加双引号)才能插入.在创建或引用分隔标识符之前,必须执行set quoted_identitfier on

例如: set quoted_identitfier on

       Create table “time”(“id” int)

set quoted_identitfier off

 

8.database.ower.table_name.column_name(数据库名称.所有者名称.表名称.列名称),

也可以database..table_name

 

9.确定标识符是否有效:selectvalid_name(“object_name”)

 

10.使用sp_rename重命名用户对象.

 

11.like

例如: ….where like “415%”

 

使用通配符

12.% 

例如:查询以568开头的电话号码

Select number from authors where number like ‘568%’

 

13._ 

例如:查询以”zhang”结尾的六个字母的姓名

Select name from users where name like “_zhang”

 

14.[] 

例如:查询以”zhang”结尾并以M和Z间的任意单个字符开头的姓名

Select name from users where like “[M-Z]inger”

查询”zhang”和”Zhang”的姓名

Select name from users where name like “[Zz]hang”

 

 

15.[^]  

例如:返回以zhang开头且后面一个字符不是y的姓名

Select name from users where name like “zhang[^y]%”

 

16.escape子句作为转义字符.

例如:like ”6@%” escape”@”  表示6%

sybase函数学习(八)

1.alter database

alter database mydb on mydate =50     --(在数据库设备mydb 上加50m数据空间,)
                                  logon mylog=10      --(在数据库设备mylog上加10m日志空间,)

 

2.alter role

例子1:将intern_role和specialist_role定义为互斥:

alter role specialist_role add exclusive membershipintern_role

 

 

例子2:在成员资格级别和激活级别将角色定义为互斥

alter role specialist_role add exclusive membershipintern_role

alter role intern_roleadd add exclusive activationsurgeon_role

 

例子3:添加口令到现有的角色

alter role doctor_role add password “zhang”

 

例子4:从现有角色删除口令

alter role doctor_role drop password

 

例子5:锁定角色physician_role

alter role physician_role  lock

 

例子6:解锁角色physician_role

alter role physician_role  unlock

 

例子7:将physician_role允许的最大登陆尝试失败次数改为5

alter role physician_role set max failed_logins 5

 

例子8:将现有角色physician_role的最短口令长度设置为5个字符

alter role physician_role set min password length 5

 

例子9:替换所有角色的最短口令长度

alter role “all overrides”  set min password length-1

 

例子10 删除所有角色的最大登陆失败次数的替换值

alter role  “alloverrides”  set max passwordlength-1

 

注意:一般为角色更改口令,请先删除口令,在添加口令.

 

3.alter table

例子1:向表中添加一列

alter table tablename add  manager_name varchar(50) null

 

例子2: 向表中添加identity列

alter table tablename add  user_id  numeric(19,0) identity

 

例子3 向表中添加主键约束.

alter table  autorsadd  constraint  au_identification primarykey(au_id,au_lname,au_fname)

 

例子4 在authors表上创建索引,设置reservepagegap值为16,在索引中为每15个分配的页留一个空白页

alter table  authors
add constraint au_identification
primary key(au_id,au_lname,au_fname)
with reservepagegap=16

 

例子5 删除au_identification约束

alter table tablename

drop constraint au_identification

 

例子6 删除authors表中phone列的缺省约束.如果列允许为空值,则没有指定值时会插入空值.如果列不允许空值,则不指定列的插入,操作将失败

alter table  authors

replace  phonedefault null

 

例子7:为表创建4个新的页链.将表分区后,现有的数据会保存在第一个分区,但是新的行会插入到所有这5个分区中

alter table tablename  partition 5

 

例子8 并置表的所有页链,然后将其重新分区为6个分区

alter table tablename  unpartition

alter table tablename  partition 6

 

例子9 将tablename表的锁定方案更改为数据行锁定

alter table tablename lock datarows

 

例子10 将非空列author_type 添加到缺省值为primary_author的authors表

alter table authors
add author_type varchar(20)
default “primary_author”  not null

 

例子11 从表中删除列

alter table tablename

drop id,name

 

例子12 将表authors的city列修改为默认值为空值的varchar(30)

alter table authors

modify city varchar(30)  null

 

例子13 将stores表中的name列修改为非空.

alter table stores

modify name not null

 

例子14 修改titles表的type列,并将titles表的锁定方案从所有页锁定更改为数据行锁定

alter  tabletitles

modify type varchar(10)

lock datarows

 

例子15 将titles表的notes列由varchar(50),将缺省值由空更改为非空,并知道exp_row_size值为40

alter table titles

modify notes varhcar(50)  not null

with  exp_row_size=40

 

例子16 添加,修改和删除一列,然后在同一查询中添加另一列.改变锁定方案,并指定新列的exp_row_size值.

alter table titles
modify city varhcar(50)   null
drop notes
add sec_advance money default 1000 not null
lock datarows
with  exp_row_size=40

sybase函数学习(九)

1.begin…..end

例如: if(select avg(number) frim  zone)<18

        Begin

              …………..

              ………….

              ………..

        end

 

2.begin transaction

例如:为insert语句显示的开始一个事务

Begin transaction

       Insert  into publishers(pub_id) values(“445”)

Commint transaction   --关闭事务

注意:要取消所有或部分事务,请使用rollback命令.rollback命令必须出现在事务内;不能在提交事务后在回退事务.

 

3.break

例如: while aa>12

       Begin

       …………

       If bb>5

              Break

       Else

              Continue

   End

注意: Break是中断while,而continue是中断本次循环.

 

4.case

例子1:把表查询结果中name为C的改为fff

SELECT id ,
case
       when name='C'
       then 'fff'
   elsename
end 
from  A

注意: end不能忘,else name如果不要,其他的name都为null了

 

5.close 

例子: close cursor_name

 

6.coalesce 它的作用和isnull一样

Coalesce(expression,expression1[,expression1]….)

例子: select id,coalesce(name,yun,'dddd'),isnull(name,'yun') from A

说明:字段name为null,就用yun的字段代替,如果yun的字段也为null,用’ddd’代替

 

 

7.create database 创建数据库

Create database mydb on mydate =50     --(在数据库设备mydb 上加50M数据空间,)
                                  logon mylog=10      --(在数据库设备mylog上加10M日志空间,)

 

8.create default

例子1;定义一个缺省值,绑定在列中

Create defulat  phonedfltas “unknown”

Sp_bindefault

sybase函数学习(十)

1.create function

 

2.create index

例子1.在authors表的au_id列上创建名为au_id_ind的索引:

Create index  au_id_indon  authors(au_id)

 

例子2.在authors表的au_id列上创建名为au_id_ind的唯一聚族索引:

Create unique clustered  index  au_id_ind on  authors(au_id)

 

例子3 在authors表的au_id和title_id列上创建名为ind1的索引

Create index  ind1  on  authors  (au_id, title_id)

 

3.create plan

例子 为指定查询创建抽象计划.

Create  plan  “select  * from titles ” “(t_scan titles)”

 

4.create  procedure 创建存储过程或可以带一个或多个用户提供的参数的扩展存储过程.

例子

create  procedure  showed(@name  varchar(100))
as
select * from authors where name=@name

 

下面是执行showid的可接受的语法形式”

Execute  showed  titles

或execute  showed  @name=”tiltes”

 

5.create  role 创建用户定义角色.指定允许用于所创建的特定角色的口令有效期,最小口令长度和最大失败登陆次数.

例子1 创建名为doctor_role的角色

Create role doctor_role

 

例子2. 创建名为doctor_role且口令为haha的角色

Create role doctor_role with passwd “haha”

 

例子3 设置intern_role的有效期

Create role intern_role , with passwd “haha”, passwd ecpiration 6

 

例子4 设置intern_role的最大失败登陆次数

Create role intern_role , with passwd “haha”, max failed_logins 20

 

例子5 设置intern_role的最短口令长度

Create role intern_role , with passwd “haha”, min passwd length 0

 

6.create rule

例子1 创建一个名为limit的规则,该规则限制advance的值小于1000

Create  rule  linit

As @advance <1000

 

例子2 创建名为pubid_rule的规则,该规则限制pub_id的值为13,14或15

Create rule  pubid_rule

As @pub_id in (‘13’,’14’,’15’)

sybase函数学习(十一)

1.disk  mirror 创建在主设备发生故障时立即接替运行得软件镜像。

2.disk  refit   通过sysdevices中的信息重建master数据库的sysusages和sysdatabases系统表

3.disk      reinit  重建master数据库的sysdevices系统表。将disk reinit作为过程的一部分使用,以便恢复master数据库。

4.disk remirror

5.disk  resize   动态添加Adaptive Server使用的设备的大小。

例子:disk resize

              Name = “test_dev”

              Size = “10M”

6.disk  unmirror 挂起用diskmirror命令启动的磁盘镜像,以允许硬件维护或硬件设备的更改。

7.drop database

8.drop default

例子 :删除数据库中用户定义的缺省datedefault

Drop default  datedefault

9.drop function

10.drop index

例子:从authors表中删除au_id_ind

Drop index  authors.au_id_ind

11.drop procedure

例子:删除存储过程shoind

Drop procedure shoind

12.drop role删除用户定义角色

13.drop rule

14.drop table

15.drop trigger

16.drop view

锁定表(排他锁)

   共享锁(S锁)又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

   排他锁(X锁)又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

例如:

begin transaction
lock talbe aaa inexclusive mode
 if not exists(select 1 from aaa where ID=xxx)
   insert aaa .....
 commit transaction

日志空间满,引起无法给表添加新字段

今天给一张表添加新字段,怎么也添加不上去,后来用sql语句写,看了报错信息才知道是日志空间满了。
所以收集了一些资料,如下:
         SYBASE ASE的每一个数据库,无论是系统数据库(master,model,sybsystemprocs, tempdb),还是用户数据库,都有自己的transaction log,每个库都有syslogs表。Log记录用户对数据库修改的操作,所以如果不用命令清除, log会一直增长直至占满空间。清除log可用dump transaction 命令;或者开放数据库选项trunclog on chkpt,数据库会每隔一段间隔自动清除log。管理好数据库log是用户操作数据库必须考虑的一面。

Server Cache Memory中日志页总是先写于数据页:

如果数据库开放trunc log on chkpt选项,则ASE在数据库系统执行checkpoint时自动清除log。但用户自己写入执行的checkpoint命令并不清除log,即使trunc log on chkpt选项开放。只有在trunc log on chkpt选项开放时,ASE自动执行checkpoint动作,才能自动清除log 。

数据库的log是不断增长的,必须在它占满空间之前清除。前面已经讨论过,清除log可以开放数据库选项trunc log on chkpt,使数据库系统每隔一段时间间隔自动清除log,还可以执行命令dump transaction 来清除log.trunc log on chkpt 选项同dump transaction withtruncate_only 命令一样,只是清除log而不保留log到备份设备上。所以如果只想清除log而不做备份,可以使用trunc log on chkpt 选项及dump transaction with truncate_only,dump transaction withno_log 命令。若想备份,应做dump transaction database_nameto dumpdevice。

 

dbcc checktable (syslogs)

*** 注意:日志段上保留的空间是 2 页 (0.03 MB),0.16%。

*** 注意:日志段上的可用空间是 1250 页 (19.53 MB),97.66%。

表包含 1041 数据行。

 

用快速方法来判断transaction log 满的程度。

select data_pgs(8,doampg) from  sysindexes where id=8

 

开放trunc log on chkpt选项(或者右击数据库,选择‘属性’,再选择‘选项’)

sp_dboption ttms_upload ,trunc,true

 

清除LOG日志

dump transaction  dbname  with truncate_only

解决办法: dump transaction  ttms_upload  with truncate_only

利用bcp导入表数据中有image列问题

今天遇到个麻烦事,就是利用bcp导数据,以前导的都成功,可是今天导出的就出问题了,因为它的列中有image类型的列.
问题一:开始导出的时候报错,说client/server字符集不一致
解决办法:在使用bcp的主机的sybase安装目录下找到locales.dat文件,将上面的iso_1(client)修改为eucgb(server)即可。至于server字符集是什么,可以通过报错信息看出来.
导出数据:C:\sybase\OCS-12_5\bin>bcpttms_test.dbo.TBL_TTMS_REPORT_TEMPLATE out D:\TBL_TTMS_REPORT_TEMPLATE-Usa -P -S ttms -t -c
导出数据成功.

问题二:导入数据失败
我用的是C:\sybase\OCS-12_5\bin>bcpttms_upload.dbo.TBL_TTMS_REPORT_TEMPLATE in D:\TBL_TTMS_REPORT_TEMPLATE -Usa -P-S ttms -t -c
解决办法:

C:\sybase\OCS-12_5\bin>bcpttms_upload.dbo.TBL_TTMS_REPORT_TEMPLATE in D:\TBL_TT
 MS_REPORT_TEMPLATE -Usa -P -S ttmsEnter the file storage type of field ID[numeric]:
 Enter prefix-length of field ID [1]:
 Enter field terminator [none]:
 Enter precision of field ID [19]:
 Enter scale of field ID [0]:Enter the file storage type of fieldFILE_NAME [char]:
 Enter prefix-length of field FILE_NAME [0]:
 Enter length of field FILE_NAME [100]:
 Enter field terminator [none]:Enter the file storage type of fieldDISPLAY_NAME [char]:
 Enter prefix-length of field DISPLAY_NAME [0]:
 Enter length of field DISPLAY_NAME [100]:
 Enter field terminator [none]:Enter the file storage type of fieldREALFILE [image]:
 Enter prefix-length of field REALFILE [4]:
 Enter field terminator [none]:Do you want to save this format informationin a file? [Y/n]
Host filename [bcp.fmt]:
Starting copy...
6 rows copied.
 Clock Time (ms.): total = 78  Avg = 13 (76.92 rows per sec.)C:\sybase\OCS-12_5\bin>



见解:开始不明白为什么导不进去,就是老抱错,说语法错误.我去掉-t -c,然后不停按回车,居然导入成功了.后来想想看过的bcp详细介绍,-c是导入char形式的,别的字段都识别,而image字段不识别,你把它导出char行,把char导成image不行,所以它老说语法错误.去掉-t -c后,他会询问你每个字段的类型,还有长度,所以才出现上面的我不挺按回车会成功.不管怎样,导入成功了.元旦快乐!

SQLSTATE代码和消息(sybase)

 

SQLSTATE代码和消息

 

警告

需要用户用户注意但尚未严重妨碍SQL语句成功执行的情况

例外

使用SQL语句无法对数据库产生影响的情况

 

SQLSTATE代码存储在sysmessages系统表中

 

 

 

消息

中文解释

发生条件

警告

 

 

Warning-null value eliminated in set funcation

警告-set函数中的NULL值已经消除

对具有NULL值的表达式使用集合函数(avg/max/min/sum/count)时会出现此信息

Warning-string data,right truncation

警告-字符串数据,右截断

将字符,unichar或二进制数据截断为255字节时会出现此信息.

 

 

 

基数冲突

 

 

Subquery returned more than 1value.this is illegal when the subquery follow =,!=,<,<=,>=,or when the subquery is user as an expression

子查询返还不止一个值,当子查询跟在=,!=,<之后或者当子查询用作表达式时,这种情况是非法的

标量子查询或行子查询返回不止一行

 

 

 

数据例外

 

 

Arithmetic overflow occurred

发生算术溢出

算术运算或SUM函数,以及截断,舍入使精确数值类型丢失精度或标度

Data exception-string data right truncated

数据例外-字符串从右侧被截断

列太短,不能容纳插入或更新的数据,而必须截断非空字符.

Divide by zero occurred

发生零除错误

对数字表达式求值而除数的值为零

Illegal escape character found.There are fewer bytes than necessary  to form a valid character

发现非法的转义字符,形成有效字符所需的字节数不过.

在转义序列不是由单个字符构成时,搜索与给定模式相匹配的字符串.

Invalid pattern string.The character following the escape character must be percent sign ,underscore ,left square bracket, right square bracket, or the escape character.

无效的模式字符串.转义字符后的字符必须是百分号,下划线,左方括号,右方括号或转义字符

搜索与特定模式相匹配的字符串时.

 

 

 

完整性约束冲突

Insert,update或delete语句与primary key ,foreign key .check或unique约束或唯一索引发生冲突.

Attempt to insert duplicate key row in object_name with unique index index_name

试图在具有唯一索引index_name的对象object_name中插入重复的键行

在具有唯一约束或索引的表中插入重复的行.

Check constraint violation occurred ,daname=database_name,table name=table_name,constraint name=constraint_name.

发生检查约束冲突

Update或delete与列的检查约束发生冲突.

Dependent foreign key constraint violation in a referential integrity constraint

参照完整性约束中发生相关外键约束冲突.

主键表上的update或delete与外键约束发生冲突.

Foreign key constraint violation occurred,

发生外键约束冲突

在主键表中无匹配值的情况下对外键表执行insert或update

 

 

 

无效的游标状态

 

 

Attempt to use cursor cursor_name which is not open.Use the system stored procedure sp_cursorinfo for more information.

试图使用未打开的游标cursor_name.有关详细信息,请使用系统存储过程sp_cursorinfo

试图从未打开或已被commit语句或者隐式(或显式)rollback关闭的游标中进行读取.重新打开游标并重新执行fetch

Cursor cursor_name was closed implicitly because the current cursor position was deleted due to an update or a delete.The cursor scan position could not be recovered.This happens for cursors which reference more than one table.

由于当前游标位置因执行update 或delete而被删除,因此游标cursor_name被隐式关闭.

多表游标的连接已被删除或更改.发出另一个fetch以重新定位游标.

 

 

 

语法错误和访问规则冲突

 

 

Command permission denied on object object_name,database database_name,owner owner_name

对象object_name,数据库database_name,所有者owner_name上的command权限被拒绝.

用户试图访问他们没有正确权限的对象.

Implicit  conversion from datatype ‘datatype’ to ‘datatype’ is not allowed.Use the convert function to run this query.

不允许执行从数据类型‘datatype’到‘datatype’的隐式转换.请使用convert函数来运行该查询.

用户试图将一种数据类型转换为另一种数据类型.

Incorrect syntax near object_name

object_name附件有语法错误

在指定对象附近发现错误的SQL语法.

Insert error:column name or number of supplied values does not match table definition

插入错误:列名或所提供值的数量与表定义不匹配.

插入时使用了无法的列名或插入的值的个数不正确.

Missing end comment mark’*/’

缺少结束注释符’*/’

有/*开始的注释

Object_name not found.Specify owner.objectname or use sp_help to check whether the object exists .

未找到Object_name,指定owner.objectname或使用sp_help检查对象是否存在.

用户试图引用他们不具有权限的对象.

The size given to the object_name exceeds the maximum.The largest size allowed is size.

为object_name指定的大小超出最大值.允许最大值为size

表定义中所有列的大小总和超出行大小允许的最大允许值.

Your server command was deadlocked with another process and has been chosen as deadlock victim

你的服务器命令与另一进程发生死锁并且被选作死锁的牺牲品.

检测到它无法保证两个或两个以上的并发事务可以序列化.

 

 

 

With check option

 

 

The attempted insert or update failed because the target view was either created with check option or spans another view created with check iption.

插入或更新尝试失败,原因是目标视图使用With check option创建的或者跨越了另一个用With check option创建的视图

视图或视图所依赖的任何视图是用With check option子句创建的.

选择前50条数据(sybase)

得到前50条数据

set rowcount 
select * from sysmessages
set rowcount  0

注意:最后必须设置为0,否则下次无聊查询多少条,他都显示50条

解决自增列数字突然变大问题(sybase)

当服务器重启或数据库出现问题的时候,向自增的表添加一列时,它的ID突然变成了50000000000000001,这样大的数字了。
现在我知道的唯一解决办法是:
1.拷贝出表的数据(不包括最后一条),
2.拷贝出表的结构
3.删除表,通过表结构键张新表
4.执行一段代码 exec sp_chgattribute  TBL_LOGIN_LOG, 'identity_gap', 15
5.导入数据

插入新数据就不会有问题了。
sp_chgattribute  是系统带的存储过程
TBL_LOGIN_LOG 是表名
15 是可变的数

这句话的意思是:当发现异常时,表TBL_LOGIN_LOG的自增字段,从最大的那个数加15起,也就是说表中最大的ID时30,如果发现异常,它的下一行的ID就是45

数据库类型分析

tinyint 

smallint  类型数据的范围是-32768-32767

int  

smalldatetime日期范围是1900年1月1日到2079年6月6号

datetime日期范围是1753年1月1日到9999年12月31号

date  

time

 

 

查询数据库中存在的数据类型:

select name,hierarchy from systypes

 

只有具有可变长度的数据类型的列才能存储NULL值,当创建具有固定长度的数据类型的NULL列时,Adaptive Server会自动将其转换为相应的可变长度的数据类型。它不会告诉用户数据类型有更改。

比如:char  ――varchar

 

numeric和decimal数据类型在各个方面都是完全相同的,但有一点不同:只有标度为0的numeric数据类型才可以用于identity列。

numeric和decimal数据类型接受两个参数:precision和scale,如numeric(precision,scale)。Adaptive Server将每一种精度和标度的组合视为不同的数据类型,如numeric(5,0)和numeric(3,0)是两种不同的数据类型。Precision(精度)指定了能够在该列中存储的最大小数位数,包括小数点左右两侧的所有位数;范围为1到38,默认18。Scale(标度)指定了小数点右侧的最大位数,必须小于或等于精度,范围为1到38,默认0。

 

timestamp数据类型,在一个表中最多只能有一列timestamp数据类型,每次修改它的行时,Adaptive Server都会更新timestamp列。

Sybase资料下载(参考手册,功能讲解很全)

sybase参考手册,内容比较全
1.参考手册:构件块
http://download.sybase.com/pdfdocs/asg1251c/blockszh.pdf

2.参考手册:命令
http://download.sybase.com/pdfdocs/asg1251c/commandszh.pdf

3.参考手册:过程
http://download.sybase.com/pdfdocs/asg1251c/sprocszh.pdf

4.参考手册:表
http://download.sybase.com/pdfdocs/asg1251c/tableszh.pdf

查询用户表的个数和怎样建数据库

用户表的个数
select  count(*)  from sysobjects where type = 'U'

系统表的个数
select  count(*)  from sysobjects where type = 'S'

存储过程的个数
select  count(*)  from sysobjects where type = 'P'

视图的个数
select  count(*)  from sysobjects where type = 'V'

建立一个数据库test_qa,在数据库设备test_qa_data上分配50M的数据空间,在数据库设备test_qa_log上分配5M日志空间
create database test_qa on test_qa_data =50 
 log on

disk init 建立数据库设备(sybase)

初始化数据库设备使用DISK INIT命令: 
DISK INIT 
NAME=设备名, 
PHYSNAME=物理设备名, 
VDEVNO=虚拟设备号, 
SIZE=块数 

其中,NAME指数据库设备名,此名将用于CREATE DATABASE和ALTER DATABASE命令。PHYSNAME是原始磁盘分区或操作系统文件名。VDEVNO是数据库设备的标识号,在SQL Server中,它必须是唯一的。SIZE的单位是2K的块,对于新创建的数据库,最小的SIZE是model数据库的尺寸.

eg:
 disk init 
 name = 'test_qa_log' ,
 physname ='d:\sybase\data\test_qa_log.dat',
 vdevno=7 ,
 size = '5M'

添加分配给数据库的空间

1.要使用alterdatabase,必须使用master数据库或在master数据库中执行存储过程。

2.只能在主设备上扩展master数据库。试图在其它数据库设备上扩展master数据库都将产生错误。alter database master on master=1

3.一般将log on扩展日志放置在不同的设备上,则一旦硬盘发生崩溃就无法完全恢复了。在这种情况下,可使用带log on子句的alter database来扩展日志,然后使用sp_logdevice。

4.sp_helpdb dbname查看数据库正在使用的设备片段的名称、大小和用法。

5.sp_spaceused查看当前数据库正在使用的空间量。

6.sp_helpdevice查看数据库设备情况。

eg: alterdatabase mydb on mydate =50     --(在数据库设备mydb 上加50M数据空间,)
                                  logon mylog=10      --(在数据库设备mylog上加10M日志空间,)