본문 바로가기
Programming/MSSQL

MSSQL 테이블 정의보기 (DBA 관리용 시스템 프로시저)

by 제타 2018. 4. 9.
반응형

다음은 MSSQL DBA용 프로시저로 테이블 컬럼 정의를 볼 수 있는 프로시저이다.


/************************************************************************************************

-- sp_column0 'dbo.user_t'

-- 해당 테이블의 컬럼을 보여준다

-- 파라미터로는 테이블명을 입력해야 한다.

************************************************************************************************/

USE MASTER

GO


IF OBJECT_ID('sp_column0') IS NOT NULL

   DROP PROCEDURE sp_column0

GO


CREATE PROC sp_column0    

  @table_name VARCHAR(100) = null  

AS  

  SET NOCOUNT ON  

  

  DECLARE @errormsg VARCHAR(100)


  IF (@table_name IS NULL)  

  BEGIN  

    RAISERROR('''@table_name'' parameter is empty...', 16, 1, @table_name)      

  

    RETURN(1)  

  END  

  

  IF (CHARINDEX('.',@table_name) = 0)  

  BEGIN   

    IF NOT EXISTS (SELECT name   

                   FROM sysobjects   

                   WHERE name = @table_name  

                   AND xtype IN ('s', 'u')  

                  )  

    BEGIN  

      SET @errormsg = 'There isn''t ''%s'' table in ' + db_name()+ ' database...'


      RAISERROR(@errormsg, 16, 1, @table_name)  


      RETURN(1)  

    END  

  END  

  ELSE   

  BEGIN   

    IF NOT EXISTS (SELECT name  

                   FROM sysobjects   

                   WHERE name = RIGHT(@table_name,LEN(@table_name)

                                -CHARINDEX('.',@table_name))   

                   AND uid = USER_ID(LEFT(@table_name,LEN(@table_name) 

                             - (LEN(@table_name)-CHARINDEX('.',@table_name)) - 1))  

                   AND xtype IN ('s', 'u')  

                  )  

    BEGIN  

      SET @errormsg = 'There isn''t ''%s'' table in ' + db_name()+ ' database...'


      RAISERROR(@errormsg, 16, 1, @table_name)  

  

      RETURN(1)  

    END  

  END  

  

  SELECT c.name "col_name", t.name "type", c.length "length", c.isnullable "nullable"  

  FROM syscolumns c INNER JOIN systypes t  

                    ON c.xusertype = t.xusertype  

  WHERE c.id = OBJECT_ID(@table_name)

  

  RETURN(0) --sp_column0

  

  SET NOCOUNT OFF


GO


GRANT EXECUTE ON sp_column0 TO PUBLIC

GO



반응형