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