본문 바로가기

DB

[MSSQL 2000]테이블명으로 PK 컬럼 반환하기

SELECT	C.NAME
FROM	SYSOBJECTS O
INNER JOIN SYSINDEXES I ON (O.ID = I.ID)
INNER JOIN SYSCOLUMNS C ON (I.ID = C.ID)
WHERE	O.NAME = '테이블명' AND 
	(I.STATUS & 0X800) = 0X800 --PK를 의미하는거 같다.
	AND (	C.NAME = INDEX_COL (@TABLENAME, I.INDID,  1) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID,  2) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID,  3) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID,  4) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID,  5) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID,  6) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID,  7) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID,  8) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID,  9) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID, 10) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID, 11) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID, 12) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID, 13) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID, 14) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID, 15) OR
		C.NAME = INDEX_COL (@TABLENAME, I.INDID, 16)
	) -- 최대 16개까지