Tamam, çok eski bir konu - ama başka bir yerde yeterli bir cevap bulamadım, bu yüzden kendimi IAmTimCorey'in başlangıç noktası olarak yanıtla araştırdım.
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
Örnek:
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>
Açıklamalar: -anlayamadığım
null sütun tespit Sybase belgelerinde elde edilmiş
- ancak nedenleri bit 3 Bu, aşağıdaki sonuçları verdi tempdb..syscolumns'taki durumun durumu buna göre değişmez, örneğimde sütun no. Bu yüzden yine de sütun durumu ekledim. Kimlik için (bit 7) işler beklendiği gibi çalışır. Herhangi bir açıklama çok takdir edilecektir.
- isql kullanırken, yeterli genişlikte (ör. -w160)
- ile başlayın. Syscolumns.name ve systypes.name için varsayılan sütun genişliği oldukça büyüktür, bu yüzden alt dizini kullanıyorum (....). Sütun adlarınız uymuyorsa kopyalanan karakterlerin sayısını (substring() 'nin son parametresi) ayarlayın.
- Tablo temasından 'tempdb ..' ifadesini atlayarak, sp_xxx komutları kullanılarak sorgulamanın tercih edilmesi durumunda normal olmayan tempdb tabloları için bu sorgu da çalışır.
OBJECT_ID ('tempdb .. # mytable') ile arama yapmayı denediniz mi? –
@Andriy - Ben SELECT ismi FROM tempdb..syscolumns NEREDE = OBJECT_ID ('tempdb .. # mytable') 'öneren cevabımı sildim çünkü OP" Sybase'de hiçbir şey döndürmedi " –