각 테이블의 데이타수를 한눈에 볼려고 합니다.
한번은 커서를 사용하고 한번 사용 안하고 할려고 했는데..
머리가 나뻐서 인지 모양이 같아 졌습니다.
그런데 줄있는 부분이 에러가 나는 데 어떻게 하면 될까요...
테이블의 이름을 변수로 받고 글구 카운트 하고 그 값을 변수에 넣고
싶은데
방법좀 가르쳐 주세요!!
밑에 소스를 보시면 제말이 무슨 말인지 알수 있을 듯 합니다.
한번 봐 주세요!!
--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
--}
|