database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 1292 게시물 읽기
No. 1292
[질문] 전체 테이블의 자료수를 한눈에 볼수 있는 방법은?
작성자
황대권(sufi1)
작성일
2004-04-20 09:42ⓒ
2004-04-20 09:43ⓜ
조회수
4,752

 

각 테이블의 데이타수를 한눈에 볼려고 합니다.

한번은 커서를 사용하고 한번 사용 안하고 할려고 했는데..

머리가 나뻐서 인지 모양이 같아 졌습니다.

그런데 줄있는 부분이 에러가 나는 데 어떻게 하면 될까요...

테이블의 이름을 변수로 받고 글구 카운트 하고 그 값을 변수에 넣고

싶은데

방법좀 가르쳐 주세요!!

밑에 소스를 보시면 제말이 무슨 말인지 알수 있을 듯 합니다.

한번 봐 주세요!!

 

--DROP FUNCTION TABLE_DATA_COUNT;

CREATE FUNCTION TABLE_DATA_COUNT ()

RETURNS @tblRTerms TABLE

 (

 TermID INT IDENTITY(1,1),

 TABLENAME VARCHAR(100),

 CRDATE VARCHAR(25),

 RECORDCOUNT INT

 )

AS

BEGIN --{

 INSERT @tblRTerms (TABLENAME, CRDATE, RECORDCOUNT)

  SELECT NAME, CRDATE, 0 FROM sysobjects WHERE xtype='U'

ORDER BY NAME


 DECLARE @TABLENAME SYSNAME

 DECLARE @RECORDCOUNT INT

 DECLARE @MAKESQL VARCHAR(255)


 

 DECLARE UPDATECURSOR CURSOR

  FOR SELECT TABLENAME, RECORDCOUNT FROM @tblRTerms

  --ORDER BY TABLENAME 가 있으면 UPDATE를 할 수

없음

  FOR UPDATE OF RECORDCOUNT


 

 OPEN UPDATECURSOR

 FETCH NEXT FROM UPDATECURSOR INTO @TABLENAME,

@RECORDCOUNT

 WHILE (@@FETCH_STATUS <> -1)

 BEGIN --{

 

  --////////////////////////////////////////////////////////////////////////////////////////

 

  --SET @MAKESQL = 'SELECT @RECORDCOUNT = COUNT(*) FROM '

+ @TABLENAME

  --EXEC @MAKESQL

  --////////////////////////////////////////////////////////////////////////////////////////

 

  --EXEC @RECORDCOUNT = 'SELECT COUNT(*) FROM ' +

@TABLENAME

  --////////////////////////////////////////////////////////////////////////////////////////

 

  SET @RECORDCOUNT = 2 --// DEBUG

  UPDATE @tblRTerms

   SET RECORDCOUNT = @RECORDCOUNT

   WHERE CURRENT OF UPDATECURSOR

  

  FETCH NEXT FROM UPDATECURSOR INTO @TABLENAME,

@RECORDCOUNT

 END --}

 CLOSE UPDATECURSOR

 DEALLOCATE UPDATECURSOR


 RETURN

END --}

 

 

 

 

--DROP FUNCTION TABLE_DATA_COUNT;


CREATE FUNCTION TABLE_DATA_COUNT ()

RETURNS @tblRTerms TABLE

 (

 TermID INT IDENTITY(1,1),

 TABLENAME VARCHAR(100),

 CRDATE VARCHAR(25),

 rTemp VARCHAR(255), --// DEBUG

 RECORDCOUNT INT

 )

AS

--{

BEGIN

 INSERT @tblRTerms (TABLENAME, CRDATE) SELECT NAME, CRDATE

FROM sysobjects WHERE xtype='U' ORDER BY NAME


 DECLARE @TOTAL_COUNTER INT

 DECLARE @COUNTER INT

 SELECT @TOTAL_COUNTER= COUNT(NAME), @COUNTER = 1 FROM

sysobjects WHERE xtype = 'U'

 WHILE (@COUNTER <= @TOTAL_COUNTER)

 --{

 BEGIN 

  DECLARE @iTable_Name SYSNAME

  DECLARE @RCOUNT INT

  DECLARE @make_SQL VARCHAR(255)


  --SET @iTable_Name = SELECT NAME FROM @tblRTerms WHERE

TermID = @COUNTER

  SELECT @iTable_Name = TABLENAME FROM @tblRTerms WHERE

TermID = @COUNTER


  --////////////////////////////////////////////////////////////////////////////////////////

 

  SET @make_SQL ='SELECT COUNT(*) FROM ' + @iTable_Name +

''

  EXEC  @RCOUNT = @make_SQL

  --////////////////////////////////////////////////////////////////////////////////////////

 

  SET @RCOUNT =1 --// DENUG


  UPDATE @tblRTerms SET rTemp = @make_SQL  WHERE

TermID = @COUNTER --// DEBUG

  UPDATE @tblRTerms SET RECORDCOUNT = @RCOUNT  WHERE

TermID = @COUNTER


  SET  @COUNTER = @COUNTER + 1  


 

 END

 --}

 RETURN

END

--}

 

 

 

이 글에 대한 댓글이 총 4건 있습니다.

 

select o.name,

          i.rows            /* 해당 인덱스의 row수 즉 테이블의 row수 */
from sysobjects o,  /* object 목록테이블 */
        sysindexes i   /* index 목록테이블 */
where o.id = i.id
and i.indid < 2          /* index 중 pk인 것만 셈 1:clustered, 0: heap */
and o.xtype='U'       /* 사용자 테이블만 체크 */
order by o.name

 

 

이렇게 하면 사용자테이블의 개략적인 row의 수를 볼 수 있을 듯..

원하시는 것이 이런 것인지 모르겠지만..

 

위쪽의 columns에 보면 좋은 글이 많이 있네요..

 

ilovesql님이 2004-04-20 12:52에 작성한 댓글입니다. Edit

감사 ...꾸벅...좋은 방법입니다.

 

제가 궁금한것은 이것도 있습니다.

///////////////////////////////////////////////////////////////////////////////// 

SET @MAKESQL = 'SELECT @RECORDCOUNT = COUNT(*) FROM '+ @TABLENAME
이렇게 쿼리문을 만들어서 그걸 실행하는 방법은 없는지요!!

EXEC @RECORDCOUNT  = @MAKESQL
이런 문장은 안되는 것 같은데요!!!

다른 방법은 없는 지요!!!

 

궁금합니다.. 한수 전수 해 주세요!!!

황대권(sufi1)님이 2004-04-20 13:15에 작성한 댓글입니다.
이 댓글은 2004-04-20 13:18에 마지막으로 수정되었습니다.

dynamic sql은 제가 별루 안써 봐서..

잘 모르겠네요..

 

메뉴에 튜토리얼에 보면

동적 쿼리의 해결사 sp_executesql vs. exec

이라는 글이 있는데 이것이 도움이 되실지 모르겠습니다.

sql님이 2004-04-20 13:54에 작성한 댓글입니다. Edit

가르쳐 주셔서 감사합니다.!!!

 

또 한수 배우게 되네요!!!

 

ilovesql님이 가르쳐주신 방법으로 땜빵은 했구요!!!

 

sql님의 한수도 열심히 찾아보죠...고맙습니다.!!..^.^;

 

황대권님이 2004-04-22 09:39에 작성한 댓글입니다.
이 댓글은 2004-04-22 13:43에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1295가상필드???? [2]
김범석
2004-04-21
2874
1294Linked Server 연결 관련 ... [1]
박태식
2004-04-21
5264
1293환장합니다..테이블조인 [2]
류승범
2004-04-20
3101
1292[질문] 전체 테이블의 자료수를 한눈에 볼수 있는 방법은? [4]
황대권
2004-04-20
4752
1291오라클의 PL/SQL 만드는 방법이 mssql에서는 틀린가요?
3948
2004-04-17
2616
1290sql 연결 질문이요 [1]
김기수
2004-04-13
3424
1289sql 설치 제대로 되어 있는지 확인하는 방법?
이준열
2004-04-13
2785
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다