좋아요, 아주 오래된 주제입니다.하지만 다른 곳에서는 충분한 답변을 찾을 수 없으므로 IAmTimCorey의 답변을 시작으로 연구했습니다.
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
예 :
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>
비고 : 나에게 알 수없는
널 (NULL) 컬럼의 검출은 Sybase 문서에서 파생 된
- 하지만 이유는 3 비트 이것은 다음과 같은 결과를 주었다 tempdb..syscolumns의 상태는 이에 따라 변경되지 않습니다 (예제의 열 num 참조). 그래서 어쨌든 열 상태를 추가했습니다. 신원 (비트 7)의 경우 예상대로 작동합니다. 어떤 설명이라도 대단히 감사하겠습니다.
- isql을 사용할 때 충분한 너비 (예 : -w160)로 시작하십시오.
- syscolumns.name 및 systypes.name의 기본 열 너비가 매우 커서 따라서 하위 문자열 (....)을 사용하고 있습니다. 열 이름이 맞지 않으면 복사 된 문자 수 (하위 문자열()의 마지막 매개 변수)를 조정하십시오.
- 테이블 이름에서 'tempdb ..'을 생략하면 sp_xxx 명령을 사용하는 것보다 쿼리를 사용하는 것이 바람직한 경우에이 쿼리는 일반 tempdb가 아닌 테이블에서도 작동합니다.
OBJECT_ID ('tempdb .. # mytable')로 검색을 시도 했습니까? –
@Andriy - OP에서 "Sybase에서 아무것도 반환하지 않습니다"라는 이유로 'SELECT name FROM tempdb..syscolumns WHERE id = OBJECT_ID ('tempdb .. # mytable ')'와 같은 대답을 삭제했습니다. –