USE [DBNAME]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE PROCEDURENAME
(
	@IN_PARAMETER1 NVARCHAR(10),
	@IN_PARAMETER2 BIGINT
)
AS
	DECLARE @SQL NVARCHAR(4000) = '';
	DECLARE @PARAMDEFINITION NVARCHAR(4000);
    
BEGIN
	SET NOCOUNT ON;
    
	SET @SQL = 
            N'
                SELECT 	* 
                    FROM 	TABLE 
                    WHERE 	IN_PARAMETER1 = @IN_PARAMETER1
                    AND	IN_PARAMETER2 = @IN_PARAMETER2		
            '
        ;

	SET @PARAMDEFINITION = N'@IN_PARAMETER1 NVARCHAR(10), @IN_PARAMETER2 BIGINT';

	EXEC SP_EXECUTESQL @SQL, @PARAMDEFINITION, 
		@IN_PARAMETER1 = @IN_PARAMETER1, @IN_PARAMETER2 = @IN_PARAMETER2
    ;
END

 

동적 쿼리(Dynamic SQL) 생성 예제

 

 

가그린 제로 구강청결제, 100ml, 1개

COUPANG

www.coupang.com

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

'Database > MSSQL' 카테고리의 다른 글

[MSSQL] 테이블 생성 및 커멘트 추가  (0) 2023.07.10
[MSSQL] 재귀 SQL 호출  (0) 2023.02.22
[MSSQL] Oracle Migration  (0) 2022.12.26
[MSSQL] - PROCEDURE CURSOR 사용 (커서)  (0) 2020.07.28
[MSSQL] - PROCEDURE IF 사용 ( 조건문 )  (0) 2019.01.15

프로젝트를 진행한 후 마무리 단계에서

 

산출물 관련 문서중 테이블 정의서나, 프로시저 정의서를 작성해야 할 때가 있다.

 

매번, 클릭해서 정보 확인하다가, 이번에 귀찮음의 귀찮음을 이기고 기록을 남겨본다.

 

필수정보(개인적으로)들만 조회 쿼리 만들어 보았다.

 

테이블 정보 및 컬럼정보다. (참고로 INFORMATION_SCHEMA.TABLES는 테이블 정보)

SELECT UPPER(TABLE_NAME), COLUMN_NAME
    ,  COLUMN_COMMENT
    ,  DATA_TYPE
    ,  CASE WHEN DATA_TYPE = 'datetime' THEN ''
            ELSE REPLACE(substring(COLUMN_TYPE, INSTR(COLUMN_TYPE, '(') + 1), ')', '') 
             END AS LENGTH
    ,  IS_NULLABLE
    ,  COLLATION_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_SCHEMA='db_schema' AND TABLE_NAME='table_name';

db_schema는 DB명을 입력하면 되고 table_name은 테이블명을 입력하면 된다.

 

다음은, 프로시저와 파라미터 정보다

SELECT A.ROUTINE_NAME
    ,  A.ROUTINE_TYPE
    ,  B.PARAMETER_MODE
    ,  B.DATA_TYPE
    ,  B.PARAMETER_NAME
    ,  B.DTD_IDENTIFIER
    ,  A.ROUTINE_DEFINITION
  FROM INFORMATION_SCHEMA.ROUTINES   A
  JOIN INFORMATION_SCHEMA.PARAMETERS B ON B.SPECIFIC_CATALOG = A.ROUTINE_CATALOG
                                      AND B.SPECIFIC_NAME    = A.ROUTINE_NAME
 WHERE A.ROUTINE_SCHEMA 	= 'db_schema'
   AND A.ROUTINE_CATALOG 	= 'def'
   AND A.ROUTINE_TYPE 		= 'PROCEDURE'
;

db_schema는 DB명을 입력하면 된다

 

 

'Database > MYSQL' 카테고리의 다른 글

[MYSQL] 특정기간 일(목록) 구하기  (0) 2022.07.29
[MYSQL] Operand should contains 1 column(s)  (0) 2022.04.06
MYSQL 버전 확인하는 방법  (0) 2022.03.16
-- 컬럼값을 넣을 변수를 선언
DECLARE @A varchar(20)
DECLARE @B INT

-- 커서 선언
DECLARE CUR CURSOR FOR

-- 조회
SELECT '가나다' AS a
    ,  5 		AS b
  FROM TABLE
;

-- 커서 실행
OPEN CUR

-- SELECT 한 결과를 @A, @B에 대입
FETCH NEXT FROM CUR INTO @A, @B

-- 조회된 Row만큼 WHILE 실행
WHILE @@FETCH_STATUS = 0

    BEGIN
    -- SQL 작성
    	

    -- 다음 커서로(Row) 이동
    FETCH NEXT FROM CUR INTO @A, @B
END

-- 커서 종료
CLOSE CUR

-- 커서 초기화
DEALLOCATE CUR
MSSQL

DECLARE @NUM INT

SET @NUM = 0

IF( @NUM = 0 )
    BEGIN

        SQL...

    END

ELSE 
    BEGIN

        SQL...

    END

 

 

+ Recent posts