A partir de una Base de datos de Sybase, ¿cómo puedo conseguir descripción de la tabla ( los nombres de campo y tipos)?

Tengo acceso a isql de línea de comandos y me gusta llegar a los Meta-Datos de todas las tablas de una base de datos determinada, posiblemente en un archivo con formato. ¿Cómo puedo lograr eso?

Gracias.

  • Debo mencionar que yo no sabe casi nada acerca de la base de datos de sybase. Estoy buscando comando sql.
InformationsquelleAutor aartist | 2009-09-15

12 Kommentare

  1. 60

    De verificación sysobjects y syscolumns tablas.

    Aquí es un diagrama de Sybase tablas del sistema.

    Lista de todas las tablas de usuario:

    SELECT * FROM sysobjects WHERE type = 'U'

    Puede cambiar la ‘U’ a otros objetos:

    • C – columna calculada
    • D predeterminado
    • F – SQLJ función
    • L – registro de
    • N – condición de partición
    • P – Transact-SQL o SQLJ procedimiento
    • PR – preparar objetos (creado por SQL Dinámico)
    • R – regla
    • RI – restricción referencial
    • S – tabla de sistema
    • TR – trigger
    • De U de la tabla de usuario
    • V – ver
    • XP – procedimiento almacenado extendido

    Lista de columnas de una tabla:

    SELECT sc.* 
    FROM syscolumns sc
    INNER JOIN sysobjects so ON sc.id = so.id
    WHERE so.name = 'my_table_name'
    • Esto está muy cerca de una única tabla. Estoy buscando los mismos datos en todas las tablas de una base de datos.
    • La vieja pregunta, lo sé, pero ¿cómo puedo obtener el mismo para una tabla temporal? Yo no lo encuentro en sysobjects o syscolumns.
    • Reemplazar SELECT * por SELECT sc.* si la falta de permisos en algunas columnas en sysobjects (como yo).
    • El cartel de enlace está roto. Sybase es definitivamente abandonar-ware en este punto en el tiempo (esto es, obviamente, no sólo en la cuenta de que).
  2. 46

    sp_help es lo que estás buscando.

    De Sybase documentación en línea del sp_help sistema de procedimiento:

    Descripción

    Informes información acerca de un objeto de base de datos (todos los objetos enumerados en sysobjects) y sobre el sistema definido por el usuario o tipos de datos, así como las columnas calculadas y los índices basados en funciones. Columna muestra optimistic_index_lock.

    Sintaxis

    sp_help [objname]

    […]

    Aquí es el (parcial) de salida de la tabla publishers (copiado de El uso de sp_help en objetos de base de datos):

    Name               Owner        Object_type     Create_date 
    ----------------   -----------  -------------   ------------------------------
    publishers         dbo          user table      Nov 9 2004 9:57AM
    
    (1 row affected)
    Column_name Type     Length   Prec  Scale   Nulls   Default_name   Rule_name
    ----------- -------  ------   ----- ------- ------- -------------- ---------- 
    pub_id      char          4    NULL  NULL        0  NULL           pub_idrule
    pub_name    varchar      40    NULL  NULL        1  NULL           NULL
    city        varchar      20    NULL  NULL        1  NULL           NULL
    state       char          2    NULL  NULL        1  NULL           NULL
    Access_Rule_name    Computed_Column_object     Identity
    ------------------- -------------------------  ------------
    NULL                NULL                                  0
    NULL                NULL                                  0
    NULL                NULL                                  0
    NULL                NULL                                  0

    Aún citando El uso de sp_help en objetos de base de datos:

    Si se ejecuta sp_help sin suministrar un nombre de objeto, el informe resultante se muestra cada objeto en sysobjects, junto con su nombre, propietario, y el tipo de objeto. También se muestra que cada usuario define el tipo de datos en systypes y su nombre, el tipo de almacenamiento, duración, si se permiten valores nulos, y cualquier defecto o reglas enlazado a él. El informe indica también que si la primaria o columnas de clave externa se han definido para una tabla o vista.

    • Por qué no ha recibido respuesta más upvotes? Esta es la solución perfecta.
    • Me gusta esta solución más que consultar la propiedad diccionario de tablas, como parece más sencillo y más robusto. Sabes por casualidad la forma adecuada de obtener todos los conjuntos de resultados de JDBC
    • enlace ya no funciona para sp_help. Lo probé y mi versión de sybase que dice «Error: Procedure ‘sp_help’ no encontrado (DBD: falló la preparación)»
  3. 6

    Sybase IQ:

    describe table_name;
    • La adición de un poco de explicación de código es siempre deseable en una buena respuesta. Ver a @Pascal respuesta para una gran respuesta, donde se incluye enlaces a la documentación, y de las copias de la información pertinente aquí.
    • Hola, creo que el «describir» comando no existe en Sybase IQ
  4. 5
         SELECT
    DB_NAME() TABLE_CATALOG,
    NULL TABLE_SCHEMA,
    so.name TABLE_NAME,
    sc.name COLUMN_NAME,
    sc.colid ORDINAL_POSITION,
    NULL COLUMN_DEFAULT,
    CASE WHEN st.allownulls=1 THEN 'YES'
     ELSE 'NO'
    END IS_NULLABLE,
    st.name DATA_TYPE,
    CASE WHEN st.name like '%char%' THEN st.length
    END CHARACTER_MAXIMUM_LENGTH,
    CASE WHEN st.name like '%char%' THEN st.length
    END*2 CHARACTER_OCTET_LENGTH,
    CASE WHEN st.name in ('numeric','int') THEN st.length
    END NUMERIC_MAXIMUM_LENGTH,
    CASE WHEN st.name in ('numeric','int') THEN st.prec
    END NUMERIC_PRECISION,
    NULL NUMERIC_PRECISION_RADIX,
    CASE WHEN st.name in ('numeric','int') THEN st.scale
    END NUMERIC_SCALE,
    CASE WHEN st.name in ('datetime') THEN st.prec
    END DATETIME_PRECISION,
    NULL CHARACTER_SET_CATALOG,
    NULL CHARACTER_SET_SCHEMA,
    NULL COLLATION_CATALOG,
    NULL COLLATION_SCHEMA,
    NULL DOMAIN_CATALOG,
    NULL DOMAIN_SCHEMA,
    NULL DOMAIN_NAME
    FROM 
    sysobjects so
    INNER JOIN 
    syscolumns sc
    ON sc.id = so.id
    inner join systypes st on st.usertype = sc.usertype 
    WHERE so.name = 'TableName'
    • Nombre de la tabla ‘syscolumns’ es ambiguo
  5. 2

    Usted puede buscar para la columna en todas las tablas en la base de datos mediante:

    SELECT so.name 
    FROM sysobjects so
    INNER JOIN syscolumns sc ON so.id = sc.id 
    WHERE sc.name = 'YOUR_COLUMN_NAME'
  6. 1

    Cuando la búsqueda de tabla de usuario, en caso de que si desea que el propietario de la tabla nombre también, puede utilizar los siguientes:

    select su.name + '.' + so.name
    from   sysobjects so,
           sysusers   su
    where  so.type = 'U' and
           so.uid  = su.uid
    order  by su.name,
              so.name
  7. 0

    Si quieres usar un programa de línea de comandos, pero no se restringe al uso de SQL, puede utilizar SchemaCrawler. SchemaCrawler es de código abierto, y puede producir archivos en formato de texto, CSV, o (X)HTML.

  8. 0

    Aquí un enfoque diferente para obtener datos de metadatos.
    Esta muy útiles comando SQL devuelve la tabla /vista de la definición como de texto:

    SELECCIONE el texto DE syscomments where id = OBJECT_ID(‘MySchema.Mitabla’) ORDEN POR número, colid2, colid

    Disfrutar
    Patrick

    • Parece que a vistas, triggers y procedimientos almacenados, pero no para las tablas
  9. 0

    En el Sybase versión que yo uso, la siguiente proporciona una lista de columnas de la tabla seleccionada

    select *
    FROM sys.syscolumns sc
    where tname = 'YOUR_TABLE_NAME'
    --and creator='YOUR_USER_NAME' --if you want to further restrict tables
    --according to the user name that created it
    • esto no funciona en Sybase ASE
    • La versión que he utilizado es SAP IQ 16 (Nuevo nombre para Sybase) select @@version; @@versión de SAP IQ/16.0.102.6.1386/20147/P/sp10.15…
    • estás confundiendo un par de cosas … 1) Sybase era el nombre de una empresa que tenía 4 diferentes RDBMS productos (ASE, sql anywhere, IQ, Ventaja) … 2) de aproximadamente 8 años de SAP compró Sybase, y durante estos últimos 8 años, SAP ha sustituyendo poco a poco el ‘Sybase’ nombre ‘SAP’; el OP ha marcado la pregunta con ‘sybase-ase’, que significa ‘Sybase ASE`; hoy en día «Sybase ASE’ va por un par de nombres … ‘Sybase ASE’ por nosotros die-hard ASE y usuarios de SAP ASE’ por todos los demás; Sybase ASE (también conocido como SAP ASE) no es el mismo como Sybase IQ (también conocido como SAP IQ), es decir, de la ASE y CI son 2 diferentes RDBMS productos
    • Gracias por la información. Como resultado, el Sybase producto que yo uso es SAP IQ Sybase IQ), no la ASE de la versión.
  10. 0

    Para Sybase ASE, el procedimiento table_name devolverá todos los metadatos de la tabla que usted está buscando.

  11. -1

    Si Sybase SQL-92 compatible, a continuación, esta información se almacena dentro de la INFORMATION_SCHEMA tablas.

    Por lo que el siguiente le dará una lista de tablas y vistas en SQL-92 base de datos compatible con

    SELECT TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    • Desafortunadamente, ese no es el caso… Tanto Sybase ASE y Sybase SQL Anywhere barco con sus propias diccionario vistas
    • No estoy de acuerdo. No hay nada de malo con lo que he dicho. Lo que sigue a partir de su declaración es que Sybase no es compatibles con SQL-92, no es que mi afirmación es incorrecta.
    • 😉 Como quieras. Pero la verdadera pregunta era acerca de Sybase, no SQL 92… en Realidad era sobre Sybase ASE, incluso si ese no fue explícitamente por la OP…
    • Creo que ambos tienen razón – de Lukas», que no es el caso» podría referirse a Steve «Si Sybase SQL-92 compatible» y sí, el OP no será capaz de obtener la información que quiere usar Steve consulta….Vergüenza a pesar de que Sybase (y otros fabricantes) no se ha implementado todavía –

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea