问题描述
我们要在Sybase ASE中查找列的默认值。下面给出了类似的sql Server查询,而我们希望sybase也是如此。
SELECT COLUMN_DEFAULT from informatION_SCHEMA.COLUMNS
解决方法
注意:从此related Q&A复制:
如何在Sybase ASE系统表中查找默认值...
- 如果列具有默认值,则 syscolumns 中的关联记录 将在 cdefault 列中存储一个非零值,即 syscolumns.cdefault> 0 。
- cdefault 的非零值是指向 syscomments 中记录的指针,该记录中存储了有关默认信息的信息,即 syscolumns.cdefault = syscomments.id 。
- 实际默认值存储在以下位置的 syscomments.text 列中 取决于默认是否为 a)内联定义的两种格式之一 作为 create / alter table 命令或 b)的一部分,通过 create default 命令定义为独立的默认值。
示例:
-- inline default value of '0' assigned to column 'b'
create table t1 (a int,b int default 0 not null,c int)
go
-- standalone default named 'myzero' with default value of '0'; bound to column 'c'
create default myzero as 0
go
sp_bindefault myzero,'t1.c'
go
sp_help t1
go
...
Column_name ... Default_name
----------- ... --------------
a ... NULL
b ... t1_b_467529718 -- inline default
c ... myzero -- standalone default
...
-- contents of syscolumns.cdefault
select name,cdefault from syscolumns where id = object_id('t1') order by colid
go
name cdefault
---------- -----------
a 0
b 467529718
c 387529433
-- contents of syscomments.text
select id,text from syscomments where id in (467529718,387529433) order by id
go
id text
--------- ---------------------------
467529718 DEFAULT 0 -- inline default
387529433 create default myzero as 0 -- standalone default
-- pulling this all together:
select col.name,com.text
from syscolumns col,syscomments com
where col.id = object_id('t1')
and col.cdefault = com.id
order by 1
go
name text
---------- ------------------------------
b DEFAULT 0 -- inline default
c create default myzero as 0 -- standalone default
从这里,您应该能够根据 syscomments.text 列的格式和实际的默认值(例如,它是数字吗?是字符串,可能有嵌入空间吗?它是一个函数引用,例如 getdate())。