我希望为表中的所有列提取 Sybase 数据类型。当我尝试使用 来实现这一点$sth->{TYPE}
时,我得到了数据类型的数字版本(即,而不是 sybase 数据类型varchar
,我得到了0
)。
从 DBD::Sybase 文档中,我注意到函数的SYBTYPE
属性syb_describe
可能能够产生我正在寻找的东西。但似乎我的理解并不正确。SYBTYPE
也仅以数字形式打印数据类型。
有没有办法获取实际 Sybase 数据类型的文本表示(而不是数字)?
听起来您希望对创建表定义进行逆向工程。这是一个可用于 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,晚安!
我找到了一种解决方法(注意:但这并不能回答问题):
我所做的只是简单地加入了sysobjects
,systypes
和syscolumns
system 表。