2015. 7. 18. 22:10

출처 : http://abacus.tistory.com/category/SQL?page=1


참고 : MS-SQL 2005 버젼부터 사용가능


SELECT

       CASE WHEN nType = 0 THEN A.name ELSE '' END ProcName

,      CASE WHEN nType = 1 THEN b.name ELSE '' END ParaName

,      C.name +

       CASE   WHEN UPPER(C.name) IN ('CHAR','NCHAR','VARCHAR','NVARCHAR') THEN '(' +

CONVERT(VARCHAR(8), B.max_length) + ')'

                    ELSE ''

       END TypeName

,      REPLACE(D.Definition, char(10) + char(13) ,  char(10) + char(13) ) Script

FROM ( SELECT object_id, name, nType FROM sys.objects CROSS JOIN (SELECT 0 nType UNION ALL

SELECT 1) B) A

       LEFT OUTER JOIN sys.sql_modules D

             ON A.object_id = D.object_id

                    AND A.nType = 0

       LEFT OUTER JOIN sys.parameters B

             ON A.object_id = B.object_id

                    AND A.nType = 1

       LEFT OUTER JOIN sys.types C

             ON B.system_type_id = C.system_type_id

                    AND B.user_type_id = C.user_type_id

WHERE OBJECTPROPERTY(A.object_id, 'IsProcedure') = 1

       AND OBJECTPROPERTY(A.object_id, 'IsMSShipped') = 0

       AND    CASE WHEN nType = 1 THEN b.name ELSE '' END IS NOT NULL

ORDER BY A.name, nType, ISNULL(B.parameter_id, 0)





---------------------------------------------------------------------------------------------------------------




DECLARE @SqlVersion AS CHAR(4)

DECLARE @maxi AS INT , @maxj AS INT

DECLARE @i AS INT , @j AS INT

DECLARE @Output VARCHAR(4000),@description VARCHAR(4000)

 

CREATE TABLE #Tables  (id int identity(1, 1), Object_id int, name varchar(155), type varchar(20), [definition] varchar(MAX))

CREATE TABLE #Parameters (id int identity(1,1), name varchar(155), type Varchar(155))

 

--SQL 버전뽑기

IF (substring(@@VERSION, 1, 25 ) = 'Microsoft SQL Server 2005')

       SET @SqlVersion = '2005'

ELSE IF (substring(@@VERSION, 1, 26 ) = 'Microsoft SQL Server  2000')

       SET @SqlVersion = '2000'

ELSE

       SET @SqlVersion = '2005'

--웹타이틀

Print '<html>'

Print '<head>'

Print '<title>::' + DB_name() + '::</title>'

--스타일

PRINT '<style>'  

PRINT '             body {'

PRINT '             font-family:verdana;'

PRINT '             font-size:9pt;'

PRINT '             }'         

PRINT '             td {'

PRINT '             font-family:verdana;'

PRINT '             font-size:9pt;'

PRINT '             }'         

PRINT '             th {'

PRINT '             font-family:verdana;'

PRINT '             font-size:9pt;'

PRINT '             background:#d3d3d3;'

PRINT '             }'

PRINT '             table'

PRINT '             {'

PRINT '             background:#d3d3d3;'

PRINT '             }'

PRINT '             tr'

PRINT '             {'

PRINT '             background:#ffffff;'

PRINT '             }'

PRINT '      </style>'

PRINT '</head>'

PRINT '<body>'

SET NOCOUNT ON

 

IF @SqlVersion = '2000'

BEGIN

       INSERT INTO #Tables (Object_id, name, type, [definition]) VALUES (1,1,1,1) --2000 없어서패수

END

ELSE IF @SqlVersion = '2005'

BEGIN

       INSERT INTO #Tables (Object_id, name, type, [definition])

       SELECT OJ.object_Id,'[' + S.name + '].[' + OJ.name + ']' AS name

       ,CASE WHEN type = 'V' THEN 'View' WHEN type = 'U' THEN 'Table' WHEN type = 'P' THEN 'PROCEDURE' END,SM.definition

       FROM sys.sql_modules AS SM

       JOIN sys.objects AS OJ ON SM.object_id = OJ.object_id

       LEFT OUTER JOIN sys.schemas AS S ON OJ.schema_id = S.schema_id

       WHERE OJ.type = 'P' AND is_ms_shipped = 0

END

SET @maxi = @@rowcount

--SP 리스트

PRINT '<table border="0" cellspacing="0" cellpadding="0" width="550px" align="center"><tr><td colspan="3" style="height:50;font-size:14pt;text-align:center;"><a name="index"></a><b>Procedure Index</b></td></tr></table>'

PRINT '<table border="0" cellspacing="1" cellpadding="0" width="550px" align="center"><tr><th>Sr</th><th>Object</th><th>Type</th></tr>'

SET @i = 1

WHILE(@i <= @maxi)

BEGIN

       SELECT  @output =  '<tr><td align="center">' + Cast((@i) as varchar) + '</td><td><a href="#' + type + ':' + name + '">' + name + '</a></td><td>' + type + '</td></tr>'

       FROM #Tables WHERE id = @i

     

       PRINT @Output

       SET @i = @i + 1

END

PRINT '</table><br />'

--SP 쿼리문

PRINT '<table border="0" cellspacing="0" cellpadding="0" width="750px" style="table-layout:fixed;"><tr><td><b>Description</b></td></tr><tr><td>' + isnull(@description, '') + '</td></tr></table><br />'

SET @i = 1

WHILE(@i <= @maxi)

BEGIN

       --table header

       SELECT @Output =  '<tr><th align="left"><a name="' + type + ':' + name + '"></a><b>' + type + ':' + name + '</b></th><td align="right"><a href="#index">Index</a></td></tr>'

       , @description = [definition]

       FROM #Tables WHERE id = @i

     

       PRINT '<br /><br /><br /><table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td align="right"></td></tr>'

       PRINT @Output

       PRINT '</table><br />'

       --Parameters정보테이블넣기

       TRUNCATE table #Parameters

     

       IF @SqlVersion = '2000'

       BEGIN

             PRINT '' --2000 없어서패수

       END

       ELSE IF @SqlVersion = '2005'

       BEGIN

             INSERT INTO #Parameters (Name, Type)

             SELECT AP.name,type_name(user_type_id) +

             CASE WHEN (type_name(user_type_id) = 'varchar' or type_name(user_type_id) = 'nvarchar' or type_name(user_type_id) ='char' or type_name(user_type_id) ='nchar')

                           THEN '(' + cast(max_length AS VARCHAR) + ')'

                     WHEN type_name(user_type_id) = 'decimal'

                           THEN '(' + cast([precision] AS VARCHAR) + ',' + cast(scale AS VARCHAR)   + ')'

                    else ''

                    end  

             FROM sys.all_parameters AP

             INNER JOIN #Tables T on T.object_id = AP.object_id

             WHERE t.id = @i

       END

 

       SET @maxj =   @@rowcount

       SET @j = 1

 

       PRINT '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Procedure Prameters</b></td></tr></table>'

       PRINT '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Datatype</th></tr>'

     

       WHILE(@j <= @maxj)

       BEGIN

             SELECT @Output = '<tr><td width="20px" align="center">' + Cast((@j) AS varchar) + '</td><td width="150px">' + isnull(name,'')  + '</td><td width="150px">' +  upper(isnull(type,'')) + '</td></tr>'

                    from #Parameters  where id = @j       

             PRINT @Output     

             SET @j = @j + 1;

       END

       PRINT '</table><br />'

       --Parameters정보테이블끝

       --SP 쿼리

       PRINT '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Description</b></td></tr><tr><td style="word-break:break-all;"><pre>' + isnull(@description, '') + '</pre></td></tr></table><br />'

       --SP 쿼리끝

       SET @i = @i + 1

END

 

--Parameters정보테이블

SET @i = 1

WHILE(@i <= @maxi)

BEGIN

     

       SET @i = @i + 1

END

DROP Table #Tables

DROP Table #Parameters

 

 

Posted by 팔개
2015. 7. 18. 19:37

출처 : http://abacus.tistory.com/176


MS SQL 2000 에서 정보를 보는 쿼리들
 
해당 DB에 어떤 Table들이 있는지, Table이 변경되었는데 무엇이 변경되었는지, 해당 DB에 어떠한 프로시저들이있는지를 한 눈에 볼 수 있는 쿼리들이다.  아주 쬐금 유용하게 쓰인다. ^^;

 

 DB 목록 보기

--목록중에 시스템 데이터베이스는 제외시키기

Select

    [name]

  , [dbid]

From Master.dbo.sysdatabases

Where [name] not in ('master''tempdb''model''msdb')

Order by dbid

 

 

 DB에 존재하는 Table 목록 보기

Select

    [name]

From dbID명(ex:master).dbo.sysobjects Where [xtype] = 'U'

 

 

 Table 변경 사항 감지

Select

    [name]

 ,  [xtype]

 ,  [schema_ver]

From dbID명(ex:master).dbo.sysobjects

Where [xtype] = 'U'

   And [schema_ver] <> 0

   And [name] = '테이블명' 

컬럼 추가 : + 16

컬럼 삭제 : + 16

컬럼 수정

    ㄱ. 컬럼명 변경 : + 32

    ㄴ. 컬럼 타입 변경 : + 16

 

 

Table - Columns

Select

    b.name As Column_Name

  , c.name As data_type

  , b.length

  , b.isnullable

  , (Case When

        (Select Distinct(k.column_name)

          From Information_schema.key_column_usage AS k

          Where k.Table_name = A.nam And k.column_name = b.name

        ) Is Null Then 'N' Else 'Y' End

     As PK

From sys.sysobjects a

       Inner join syscolumns b On a.id = b.id

       Inner join systypes c On b.xtype = c.xtype

Where a.name = '테이블명'

Order BY a.name, b.name

 

-- 아래와같이 출력 된다.

-- 이 버전 말고 후에 다른 버전을 올릴 생각이다. 

 

  

Stored Procedure Query

--해당 DB의 모든 사용자 프로시저가 출력된다.

Select * From sysobjects Where type = 'P'

 

 

Stored Procedure 목록, Stored Procedure 내용

--해당 DB의 모든 사용자 프로시저 및 그 프로시저의 내용이 출력된다.

Select

    so.[name]
  , sc.[text]
From dbo.sysobjects As so Inner Join dbo.syscomments As Sc
On so.id = sc.id
Where so.[type] = 'P'

 

 

sysobject xtype 정의

C = Check 제약 조건

D = 기본값 또는 Default 제약 조건

F = Foreign Key 제약 조건

L = 로그

FN = 스칼라 함수

IF = 인라인 테이블 함수

P = 저장 프로시저

PK = Primary Key 제약 조건

RF = 복제 필터 저장 프로시저

S = 시스템 테이블

TF = 테이블 함수

TR = 트리거

U = 사용자 테이블

UQ = Unique 제약 조건

V = 뷰

X = 확정 저장 프로시저

--해당 정의는 MSSQL 2000에서 유용한것이고, 2005 부터는 type의 목록이 조금 추가가 되었다.

--또한 2005부터는 sysobject 가 아닌 sys.object 를 쓰기 바란다.

--sysobject 는 이전버전과 호환성을 위해 포함된 뷰이고

--sys.object는 sysobject를 대신하는 시스템뷰이다.

Posted by 팔개
2015. 5. 19. 12:42


+ 설정 더보기를 클릭하면 두번째 이미지와같이 펼쳐진다.




아래와 같이 머리글과바닥글을 해지한다.

배경그래픽을 체크할 경우 웹화면과 동일하게 출력 된다.


여기서 인쇄대상이 PDF로 되어 있기 때문에 바로 인쇄버튼을 클릭할 경우 PDF로 저장된다.




Posted by 팔개