syb_describe在DBD :: Sybase中

时间:2012-07-17 11:19:52

标签: perl sybase

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

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

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

2 个答案:

答案 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)

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

我所做的只是加入了sysobjectssystypessyscolumns系统表。