SYBASE --- all commands

来源:互联网 发布:js eval 不能用 编辑:程序博客网 时间:2024/06/05 09:19

sybase函数学习(一)

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

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

select ASCII(‘B’) 结果:66

 

 avg 返回所有(不同)值的数字平均值 avg([all | distinct ] expression),其中all为缺省值,表示全部;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 直接比较两个字符串,如果不一样,则返回-1

 

2.convert  数据类型转换函数,如:convert(varchar(20),title)

 

3.count 返回非空值的数量或选定的行数。count([all|distinct]expression)

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

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

select count(distinct city) from authors

 

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) from titles

向日期前添加一天

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 以整数的形式返回指定date的指定部分。

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

 

6.day 返回指定日期的datepart中表示天的整数

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

 

7.db_id 返回数据库的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 返回当前Adaptive Server客户端机操作系统进程ID,

host_name 返回当前Adaptive Server客户端机操作系统进程名称 

例如:select host_name(),host_id()

结果:ylzhang,1365

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

 

5.identity_burn_max 跟踪给定表的identity burn最大值,此函数只返还只而不进行更新。

例如:select  identity_burn_max(‘tablename’)

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

 

6.index_col 返回指定表或视图中带索引的列的名称。

7.index_clolrder 返回列的顺序

 

8.isnull  当expression求值为null时,用expression中的值替代它。

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

 

9.is_sec_service_on 安全服务启用时返回1;否则返回0

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

       select year(getdate())   结果:2006

 

16.mut_excl_roles 返回有关两个角色之间互斥性的信息。

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

 

17.newid 根据提供的参数生成两种不同格式的、人工可读的全局唯一ID

Newid([optionflag])

例如:select newid()

select newid(0)

select newid(0x0)

select newid(1)

 

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

Select id  from  tablename order by newid()

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

 

18. next_identity 检查下一个insert可用的下一个标识值。(就是下一个自增的ID)

Next_identity(tablename)

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

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

 

19.object_id 返回指定对象的对象ID,object_name是返回对象ID的对象名称。

Obeject_di(object_name)

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

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

同样 selectobject_name(437573566)   结果:TBL_ZONE

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

sybase函数学习(五)

1.pi 返回常量3.1415926535897936。

例如:select pi()

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

 

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

Power(value,power)

例如:select power(2,4)  结果:16

         select power(3,0)  结果:1

 

3.proc_role 返回关于是否已授予用户指定角色的信息。(通俗点就是你登陆后看看你是否有某些角色,有则返回1,否则返回0)

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

Select proc_role(‘sso_role’)

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

Select proc_role(‘oper_role’)

 

4.rand 返回0-1之间的随机值,该值是使用指定的源值来生成的。

例如: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 当role2包含role1是返回1

role_contain(‘role1’,’role2’)

 

9.role_id  返回已指定名称的角色的系统角色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  返回指定值的符号:+1(正)、0或-1(负)

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  返回表示为float的指定值的平方值。

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  从syslogins表中返回服务器用户的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 返回数据库中指定用户或当前用户的ID号

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

例如:select user_id()

或select user_id(‘lei’)

或select user_name()

或select user_name(4)

 

13.valid_name  如果指定字符串不是有效标识符,则返回0,否则返回非0数字

 

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 匹配,not like 是不匹配

例如: ….where like “415%”

 

使用通配符

12. 任何包含0或者多个字符的字符串

例如:查询以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  包含一系列SQL语句,以使控制语言可以影响整个组的性能.

例如: 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循环中退出.

例如: 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 phonedflt , “authors.phone”

sybase函数学习(十)

1.create function 通过将SQL包装加入到JAVA静态方法中,创建用户定义的函数.可返回一由该方法定义的值.

 

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       在磁盘镜像因镜像设备故障而停止或者被disk  unmirror命令临时禁用后重新启动它。

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 删除SQL函数

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 ttms

Enter 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  50

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    类型数据的范围是0-255

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

int         类型数据的范围是-2147483648-2147483648

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

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

date      日期范围是0001年1月1日到9999年12月31号

time   日期范围是00:00:00:000 到 23:59:59:999

 

 

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

select name,hierarchy from systypes order by hierarchy

 

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

比如:char  ――varchar

 

numericdecimal数据类型在各个方面都是完全相同的,但有一点不同:只有标度为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 test_qa_log =5

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日志空间,)

0 0