반응형
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 사용할 수 있는 곳.
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 사용하는 것을 추천합니다.
반응형