Ok, sé, un tema muy viejo, pero no pude encontrar una respuesta suficiente en ningún otro lado, así que investigué con la respuesta de IAmTimCorey como punto de partida.Esto dio el siguiente resultado:
SELECT sc.colid,
Substring(sc.NAME, 1, 40) 'column name',
Substring(st.NAME, 1, 40) 'type',
sc.length,
sc.prec,
sc.status,
(CASE
WHEN (sc.status & 8) != 0 THEN 'Y'
ELSE 'N'
END) AS 'nullable',
(CASE
WHEN (sc.status & 128) != 0 THEN 'Y'
ELSE 'N'
END) AS 'identity'
FROM tempdb..syscolumns sc
INNER JOIN tempdb..sysobjects so
ON sc.id = so.id
INNER JOIN systypes st
ON st.type = sc.type
AND st.usertype = sc.usertype
WHERE so.NAME = 'test'
ORDER BY sc.colid
Ejemplo:
1> create table tempdb..test(id numeric (15,0) identity, string varchar(40), num numeric(15,0) not null, dt datetime, flt float)
2> go
1> select sc.colid, substring(sc.name, 1, 40) 'column name', substring(st.name, 1, 40) 'type', sc.length, sc.prec, sc.status, (case when (sc.status & 8) != 0 then 'Y' else 'N' end) as nullable, (case when (sc.status & 128) != 0 then 'Y' else 'N' end) as ident from tempdb..syscolumns sc inner join tempdb..sysobjects so on sc.id = so.id inner join systypes st on st.type = sc.type and st.usertype = sc.usertype where so.name = 'test' order by sc.colid
2> go
colid column name type length prec status nullable ident
------ ---------------------------------------- ---------------------------------------- ----------- ---- ------ -------- -----
1 id numeric 8 15 128 N Y
2 string varchar 40 NULL 0 N N
3 num numeric 8 15 0 N N
4 dt datetime 8 NULL 0 N N
5 flt float 8 NULL 0 N N
(5 rows affected)
1>
Observaciones:
- La detección de columnas anulables se ha derivado de la documentación Sybase, pero por razones desconocidas para mí bit 3 del estado en tempdb..syscolumns no cambia en consecuencia, vea la columna num en mi ejemplo. Es por eso que agregué el estado de la columna de todos modos. Para identidad (bit 7) las cosas funcionan como se esperaba. Cualquier explicación sería muy apreciada.
- Al usar isql, comience con ancho suficiente (por ejemplo, -w160)
- El ancho de columna predeterminado para syscolumns.name y systypes.name es bastante grande, por lo tanto, estoy utilizando una subcadena (....). Ajuste el número de caracteres copiados (último parámetro de la subcadena()) si los nombres de sus columnas no encajan.
- Al omitir 'tempdb ..' de los nombres de la tabla, esta consulta también funciona para las tablas normales que no son tempdb en caso de que se prefiera una consulta en lugar de utilizar los comandos sp_xxx.
¿Has intentado buscar por OBJECT_ID ('tempdb .. # mytable')? –
@Andriy - Eliminé mi respuesta sugiriendo 'SELECT nombre FROM tempdb..syscolumns WHERE id = OBJECT_ID ('tempdb .. # mytable')' como OP dijo "no devuelve nada en Sybase" –