我希望为表中的所有列提取Sybase数据类型。当我尝试使用$sth->{TYPE}
实现此目的时,我得到数据类型的数字版本(即,而不是sybase数据类型varchar
,我得到0
)。
从DBD :: Sybase文档中,我注意到SYBTYPE
函数的syb_describe
属性可能能够生成我正在寻找的内容。但似乎我的理解不合适。 SYBTYPE
也仅以数字形式打印数据类型。
有没有办法获取实际Sybase数据类型的文本表示(而不是数字)?
答案 0 :(得分:1)
听起来您希望逆向工程创建表定义。这是一个可用于Sybase或SQL Server表的SQL脚本。
select c.name,
"type(size)"=case
when t.name in ("char", "varchar") then
t.name + "(" + rtrim(convert(char(3), c.length)) + ")"
else t.name
end,
"null"=case
when convert(bit, (c.status & 8)) = 0 then "NOT NULL"
else "NULL"
end
from syscolumns c, systypes t
where c.id = object_id("my_table_name")
and c.usertype *= t.usertype
order by c.colid
go
注意:仍然可以使用nawk脚本编辑它以创建真正的SQL模式文件。 nawk脚本将删除标题,添加“create table my_table_name”,添加逗号,删除页脚并添加“go”。
好的SQL,晚安!
答案 1 :(得分:0)
我找到了一种解决方法(注意:这不会回答这个问题):
我所做的只是加入了sysobjects
,systypes
和syscolumns
系统表。