ASE 12.0을 사용합니다 어느날 예제를 보다보니
select name , rowcnt(sysindexes.doampg) cnt from sysindexes
이런 쿼리를 보게 되었어요.. 대강은 알겠는데
우선 sysindexes에 어떤 내용이 들어가나요? name로 제가 원하는 테이블을
찾았더니 그건 없더라구요
그리고 rowcnt() 이건 ASE에서 쓰는 함수 인가요?
많은 도움 부탁드립니다
1. rowcnt는 ASE에서 사용하는 function입니다
allocation map에서 record count를 저장한 부분을 가지고 오는 것입니다.
2.sysindexes는 index에 관련된 정보를 저장한 table입니다.
id : object들의 고유한 id
indid : index형태 구분 0. data, 1.clustered index ,2보다 큰것 : nonclustered index, 255. text나 image
그러므로
본인이 원한는 table의 건수를 찾기 위해서는
select name , indid,rowcnt(sysindexes.doampg) from sysindexes where id=object_id("원하는 table이름")
id name indid ----------- ------------------------------ ----------- ------ 4963144 test 0 0 4963144 test 103 1
clusterd indes가 있는경우 여기에 count가 있고 나머지는 0
clustered index가 있고 nonclustered index가 있으면 여기에 count가 있고 나머지는 0
index가 아예없으면 data에 있음
즉, indid가 1이 존재하면 거기의 cnt를 읽고
1은 없고 2보다 큰게 있으면 거기의 cnt를 일고
아예없으면 0에서 읽는다.
declare @a intif exists (select * from sysindexes where id=object_id("테이블이름") and indid=1)select @a=1else if exists(select * from sysindexes where id=object_id("테이블이름") and indid=2)select @a=2else select @a=0
select name,id,indid,rowcnt(sysindexes.doampg) from sysindexes where id=object_id("테이블이름") and indid=@a
수고하세요
좋은정보 감사합니다