/* <sp_stat.sql>
정원혁 2003.8.12
설명 : 주어진 테이블의 주어진 컬럼에 대한 통계를 보여준다.
만약 해당 컬럼의 통계가 없다면 새로 생성하고 보여준 후 삭제한다
수정: 2006.6.정원혁
특수 테이블 이름, 컬럼 처리 가능하도록 수정
like 사용하여 발생하던 오류 수정
*/
USE master
GO
IF object_id('dbo.sp_stat') IS NOT NULL
DROP PROC dbo.sp_stat
GO
CREATE PROC sp_stat
@objname sysname = null
, @colname sysname = null
, @fullscan bit = 0
, @debug bit = 0 --동적 쿼리 문장을 보여주기 위한 디버깅 용도
AS
SET NOCOUNT ON
SET LOCK_TIMEOUT 30000
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
IF @objname IS NULL OR @colname IS NULL
BEGIN
PRINT '테이블 이름과 컬럼이름이 없습니다.'
RETURN -1
END
IF LEFT (@objname , 1) <> '['
SET @objname = '['+ @objname + ']'
IF LEFT (@colname , 1) <> '['
SET @colname = '['+ @colname + ']'
IF @debug = 1
select @objname, @colname
--이미 통계가 존재하는지 검사한다
DECLARE @statName sysname
SET @statName = NULL
SELECT @statName = i.NAME
FROM sysindexes i
JOIN sysobjects o ON i.id = o.id
WHERE o.NAME = @objname
AND i.NAME = @colname
if @debug = 1
select @statName as statName
IF @statName IS NULL
BEGIN
DECLARE @sql varchar(2000)
SET @sql='Create Statistics ' + REPLACE(@colname, '[', '[tmp_') + ' on '+@objname+'('+@colname+') '
IF @fullscan = '1'
SET @sql = @sql + ' WITH FULLSCAN'
IF @debug = 1
PRINT @sql
ELSE
EXECUTE(@sql)
SET @sql='DBCC SHOW_STATISTICS('+@objname+' , '+ REPLACE(@colname, '[', '[tmp_') +')'
IF @debug = 1
PRINT @sql
ELSE
EXECUTE(@sql)
SET @sql='DROP STATISTICS '+@objname+'.'+REPLACE(@colname, '[', '[tmp_')
IF @debug = 1
PRINT @sql
ELSE
EXECUTE(@sql)
END
ELSE BEGIN
SET @sql='DBCC SHOW_STATISTICS('+@objname+', '+@statName+')'
IF @debug = 1
PRINT @sql
ELSE
EXECUTE(@sql)
END
GO
/* 테스트
USE Credit
EXEC sp_stat charge, charge_amt, 1, 1
EXEC sp_stat charge, charge_amt
use northwind
exec sp_stat [order details], ProductID, 0, 1
*/
'연구개발 > SQL2005' 카테고리의 다른 글
join & subquery 연습 (0) | 2010.06.18 |
---|---|
그룹함수 (0) | 2010.06.18 |
ANSI_NULLS NULL값과 비교 (0) | 2010.06.08 |
QUOTED_IDENTIFIER (0) | 2010.06.08 |
[SQL 2005 GUIDE] 재컴파일 발생 원인 추적하기 (0) | 2009.07.25 |