본문 바로가기
DataBase/MsSql

MSSQL EXECUTE 사용법 및 실행 예제

by 아우럼 2024. 5. 6.
반응형

MSSQL EXECUTE 명령은 MSSQL에서 저장 프로시저 또는 전달된 SQL 문자열을 실행하는 데 유용하게 사용됩니다.

MSSQL EXECUTE 특징

PROCEDURE, FUNCTION 실행.

  • EXECUTE 명령어는 시스템 PROCEDURE, 사용자 정의 PROCEDURE, 스칼라 반환 사용자 정의 FUNCTION을 실행하거나 Transact-SQL 일괄 처리할 때 사용합니다.

문자열, dynamic SQL 실행.

  • 문자열 조합으로 작성된 Transact-SQL 문이나 사용자 정의 PROCEDURE 내에서 동적으로 생성된 쿼리나 일괄 처리를 실행할 때 유용합니다.

MSSQL EXECUTE 사용 권한.

  • EXECUTE 문을 실행하는 데에는 사용 권한이 필요하지 않지만, EXECUTE 문자열 내에서 참조되는 대상에 대해서는 권한이 필요합니다.
  • 즉, EXECUTE 문자열 내 UPDATE, INSERT 문이 있는 경우 해당 테이블에 UPDATE, INSERT 권한이 있어야 합니다.

실행된 반환하는 결과 집합.

  • WITH RESULT SETS 옵션을 사용하여 반환되는 결과 집합을 정의할 수 있습니다.

MSSQL EXECUTE 사용할 수 있는 곳.

EXECUTE를 사용할수 있는 흐름도.
EXECUTE를 사용할수 있는 흐름도.

MSSQL EXECUTE 사용 방법

MSSQL에서 EXECUTE 명령의 기본 구문.

  • 기본적인 문을 실행하는 예제입니다.
CREATE TABLE InfoForExecute (
    UserId int,
    UserNm varchar(255) NOT NULL,
	WirteDate  datetime
);
 
INSERT INTO dbo.InfoForExecute(UserId,UserNm,WirteDate) 
VALUES (272, N'Ken',getdate())
 ,(273, N'Brian',getdate())
 ,(274, N'Stephen',getdate())
 ,(275, N'Michael',getdate())
 ,(276, N'Linda',getdate());

-- SQL Server에서 EXEC 명령의 기본 구문
-- DROP PROCEDURE IF EXISTS USP_EXECUTE_BASIC;
CREATE PROCEDURE USP_EXECUTE_BASIC
    @UserNm NVARCHAR(10)
AS
BEGIN
    SELECT * FROM InfoForExecute WHERE UserNm = @UserNm;
END;
-- EXECUTE
EXECUTE sp_who;
EXECUTE('SELECT * FROM InfoForExecute;');
EXECUTE USP_EXECUTE_BASIC 'Stephen'; 
EXECUTE USP_EXECUTE_BASIC @UserNm = 'Stephen';

매개 변수 사용.

  • 저장 프로시저에 매개 변수를 전달해서 실행할 수 있습니다.
  • 프로시저의 매개 변수를 선언할 수도 있지만 순서대로 값을 전달할 수도 있습니다.
-- 여러 매개 변수 사용
-- DROP PROCEDURE IF EXISTS USP_EXECUTE_MULTI_PARAM;
CREATE PROCEDURE USP_EXECUTE_MULTI_PARAM   
   @UserNm NVARCHAR(10),
   @InputDate datetime
AS
BEGIN
  SELECT * 
    FROM InfoForExecute 
  WHERE UserNm = @UserNm
    and WirteDate <  @InputDate
	;
END;
-- EXECUTE
DECLARE @InputDate datetime;
SET @InputDate = GETDATE();
EXECUTE dbo.USP_EXECUTE_MULTI_PARAM 'Stephen', @InputDate;

변수와 함께 EXECUTE 'tsql_string' 사용.

  • 선언한 변수에 실행할 문자열을 동적으로 할당하여 실행하는 방법입니다.
-- 변수와 함께 EXECUTE 'tsql_string' 사용
declare @tablesStr varchar(100)
       ,@whereStr varchar(100);      
      
 set @tablesStr = '  InfoForExecute ';
 set @whereStr = ' WHERE UserId = 273 ';
 EXECUTE ('SELECT * FROM ' + @tablesStr +  @whereStr + ' ;');

저장 프로시저 변수와 함께 EXECUTE 사용.

  • 저장 프로시저를 변수에 할당한 후 변수를 실행하는 예제입니다.
-- 저장 프로시저 변수와 함께 EXECUTE 사용
CREATE PROCEDURE USP_EXECUTE_WITH_PROCEDURE   
AS
BEGIN
    SELECT * FROM InfoForExecute ;
END;
-- EXECUTE
DECLARE @PROC_NM varchar(100);
SET @PROC_NM = 'USP_EXECUTE_WITH_PROCEDURE';
-- EXEC @@PROC_NM;
EXECUTE @PROC_NM;

DEFAULT와 함께 EXECUTE 사용.

  • 저장 프로시저를 만들 때 DEFAULT 값을 만들어 줄 수 있습니다.
  • 프로지저 실행 시 매개 변수 값이 없는 경우 DEFAULT 값을 넣어줍니다.
-- DEFAULT와 함께 EXECUTE 사용 
-- DROP PROCEDURE dbo.USP_EXECUTE_WITH_Defaults;
CREATE PROCEDURE dbo.USP_EXECUTE_WITH_DEFAULTS (
@PARAM1 SMALLINT = 42, 
@PARAM2 CHAR(1), 
@PARAM3 VARCHAR(20) = 'DEFAULTS EXECUTE')
AS 
   SET NOCOUNT ON;
   SELECT @PARAM1, @PARAM2, @PARAM3
;
-- 여러 종류로 EXECUTE
-- Specifying a value only for one parameter (@p2).
EXECUTE DBO.USP_EXECUTE_WITH_DEFAULTS @PARAM2 = 'A';
-- Specifying a value for the first two parameters.
EXECUTE DBO.USP_EXECUTE_WITH_DEFAULTS 68, 'B';
-- Specifying a value for all three parameters.
EXECUTE DBO.USP_EXECUTE_WITH_DEFAULTS 68, 'C', 'HOUSE';
-- Using the DEFAULT keyword for the first parameter.
EXECUTE DBO.USP_EXECUTE_WITH_DEFAULTS @PARAM1 = DEFAULT, @PARAM2 = 'D';
-- Specifying the parameters in an order different from the order defined in the procedure.
EXECUTE DBO.USP_EXECUTE_WITH_DEFAULTS DEFAULT, @PARAM3 = 'LOCAL', @PARAM2 = 'E';
-- Using the DEFAULT keyword for the first and third parameters.
EXECUTE DBO.USP_EXECUTE_WITH_DEFAULTS DEFAULT, 'H', DEFAULT;
EXECUTE DBO.USP_EXECUTE_WITH_DEFAULTS DEFAULT, 'I', @PARAM3 = DEFAULT;

사용자 정의 함수와 함께 EXECUTE 사용.

  • 함수에서 반환되는 값을 변수에 할당 후 RETURN 할 수 있습니다.
-- 사용자 정의 함수와 함께 EXECUTE 사용
-- drop FUNCTION FN_USER_DEFINE_EXECUTE;
CREATE FUNCTION FN_USER_DEFINE_EXECUTE(@InYear INT)
RETURNS INT
AS
BEGIN
    DECLARE @Year INT
    SET @Year = YEAR(GETDATE()) - @InYear
    RETURN (@Year)
END
-- EXECUTE 
DECLARE @ReturnVal nvarchar(50);
SET @ReturnVal = NULL;
EXEC @ReturnVal = dbo.FN_USER_DEFINE_EXECUTE @InYear = '2020';
SELECT @ReturnVal;

EXECUTE를 사용하여 반환되는 DATA 재정의.

  • MSSQL EXECUTE를 사용하여 단일 결과 집합 다시 정의할 수 있습니다.
  • 프로시저에서 SELECT 결과 DATA를 정의할 수 있습니다.
  • MSSQL EXECUTE를 사용하여 두 결과 집합 다시 정의할 수 있습니다.
  • 한 개의 프로시저에서 두 개 이상의 SELECT 결과 DATA를 정의할 수 있습니다.
--EXECUTE를 사용하여 단일 결과 집합 다시 정의
CREATE PROCEDURE USP_EXECUTE_RESULT_SETS
    @UserNm NVARCHAR(10)
AS
BEGIN
   SELECT UserId,UserNm FROM InfoForExecute ;
END;
--EXECUTE
EXEC USP_EXECUTE_RESULT_SETS 'Brian' 
WITH RESULT SETS  
(   
   (
    [Reporting Level] INT  NULL,  
    [ID of Employee] VARCHAR(100)  NULL
	)    
);

-- EXECUTE를 사용하여 두 결과 집합 다시 정의
-- DROP PROCEDURE USP_EXECUTE_MULTI_RESULT_SETS
CREATE PROCEDURE USP_EXECUTE_MULTI_RESULT_SETS
    @UserNm NVARCHAR(10)
AS
BEGIN
     SELECT UserId FROM InfoForExecute ;
	 SELECT UserId,UserNm FROM InfoForExecute ;
END;
-- EXECUTE
EXECUTE USP_EXECUTE_MULTI_RESULT_SETS 'Ken' 
WITH RESULT SETS  
(  
   (
    [onReurnData] INT  NULL 

   ),
   (
    [Reporting Level] INT  NULL,  
    [ID of Employee] VARCHAR(100)  NULL
	)    
);

MSSQL EXECUTE 사용 시 주의 사항

  • 문자열 조합으로 Transact-SQL 문을 실행할 때 악의적인 공격에 노출될 수 있으므로 주의해야 합니다.
  • 매개 변수로 값을 받아 MSSQL EXECUTE 실행하거나 sp_executesql 사용하는 것을 추천합니다.

반응형