0

我希望为表中的所有列提取 Sybase 数据类型。当我尝试使用 来实现这一点$sth->{TYPE}时,我得到了数据类型的数字版本(即,而不是 sybase 数据类型varchar,我得到了0)。

从 DBD::Sybase 文档中,我注意到函数的SYBTYPE属性syb_describe可能能够产生我正在寻找的东西。但似乎我的理解并不正确。SYBTYPE也仅以数字形式打印数据类型。

有没有办法获取实际 Sybase 数据类型的文本表示(而不是数字)?

4

2 回答 2

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,晚安!

于 2012-10-05T23:44:58.570 回答
0

我找到了一种解决方法(注意:但这并不能回答问题):

我所做的只是简单地加入了sysobjects,systypessyscolumnssystem 表。

于 2012-07-20T17:37:51.787 回答