안녕하세요 초보 개발자 입니다.
sp_executesql 관련하여 문의 드리고자 합니다..
기존에 Mybatis에 정의된 UPDATE 쿼리문을 프로시저로 옮겨보고 있습니다.
성능향상 및 속도개선 등의 이유로 자주 사용하는 쿼리문이라 EXEC 대신 sp_executesql을 사용해보려 합니다.
sp_executesql 사용 및 작성방법을 찾아 다음과 같이 프로시저를 작성해보았습니다.
java에서 해당 프로시저 호출 시 error도 발생하지 않고 update도 진행하지 않은채 그대로 넘어가버리네요 ㅠㅠ...
다음은 작성해본 프로시저 입니다.
고수님들의 조언 부탁 드립니다..
----------------------------------------------------------------------------------------------
ALTER PROCEDURE dbo.NEWUPDATEARROWCOUNTBYDISTANCE
@udtId VARCHAR(10) = NULL,
@scorerAgree VARCHAR(10) = NULL,
@e1P VARCHAR(10) = NULL,
@e2P VARCHAR(10) = NULL,
@e3P VARCHAR(10) = NULL,
@e4P VARCHAR(10) = NULL,
@e5P VARCHAR(10) = NULL,
@e6P VARCHAR(10) = NULL,
@e1A VARCHAR(20) = NULL,
@e2A VARCHAR(20) = NULL,
@e3A VARCHAR(20) = NULL,
@e4A VARCHAR(20) = NULL,
@e5A VARCHAR(20) = NULL,
@e6A VARCHAR(20) = NULL,
@point VARCHAR(10) = NULL,
@eHit VARCHAR(10) = NULL,
@e10 VARCHAR(10) = NULL,
@eX VARCHAR(10) = NULL,
@gmId VARCHAR(10) = NULL,
@gmYear VARCHAR(10) = NULL,
@gmSex VARCHAR(10) = NULL,
@gmMth VARCHAR(10) = NULL,
@gmKind VARCHAR(10) = NULL,
@adNo VARCHAR(10) = NULL,
@gmDis VARCHAR(10) = NULL
AS
BEGIN
DECLARE @SQLString NVARCHAR(MAX)
DECLARE @ParmDefinition NVARCHAR(3000)
DECLARE @v_udtId VARCHAR(10) = @udtId
DECLARE @v_scorerAgree VARCHAR(10) = @scorerAgree
DECLARE @v_e1P VARCHAR(10) = @e1P
DECLARE @v_e2P VARCHAR(10) = @e2P
DECLARE @v_e3P VARCHAR(10) = @e3P
DECLARE @v_e4P VARCHAR(10) = @e4P
DECLARE @v_e5P VARCHAR(10) = @e5P
DECLARE @v_e6P VARCHAR(10) = @e6P
DECLARE @v_e1A VARCHAR(20) = @e1A
DECLARE @v_e2A VARCHAR(20) = @e2A
DECLARE @v_e3A VARCHAR(20) = @e3A
DECLARE @v_e4A VARCHAR(20) = @e4A
DECLARE @v_e5A VARCHAR(20) = @e5A
DECLARE @v_e6A VARCHAR(20) = @e6A
DECLARE @v_point VARCHAR(10) = @point
DECLARE @v_eHit VARCHAR(10) = @eHit
DECLARE @v_e10 VARCHAR(10) = @e10
DECLARE @v_eX VARCHAR(10) = @eX
DECLARE @v_gmId VARCHAR(10) = @gmId
DECLARE @v_gmYear VARCHAR(10) = @gmYear
DECLARE @v_gmSex VARCHAR(10) = @gmSex
DECLARE @v_gmMth VARCHAR(10) = @gmMth
DECLARE @v_gmKind VARCHAR(10) = @gmKind
DECLARE @v_adNo VARCHAR(10) = @adNo
DECLARE @v_gmDis VARCHAR(10) = @gmDis
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SET @SQLString =
N'UPDATE GINDQUAM
SET UDT_ID = @v_udtId
, UDT_DT = CONVERT(VARCHAR(20), GETDATE(),110)
, SCORER_AGREE_YN = @v_scorerAgree
, E1_P = @v_e1P
, E2_P = @v_e2P
, E3_P = @v_e3P
, E4_P = @v_e4P
, E5_P = @v_e5P
, E6_P = @v_e6P
, E1_A = @v_e1A
, E2_A = @v_e2A
, E3_A = @v_e3A
, E4_A = @v_e4A
, E5_A = @v_e5A
, E6_A = @v_e6A
, POINT = @v_point
, E_HIT = @v_eHit
, E_10 = @v_e10
, E_X = @v_eX
WHERE GM_ID = @v_gmId
AND GM_YEAR = @v_gmYear
AND GM_SEX = @v_gmSex
AND GM_MTH = @v_gmMth
AND GM_KIND = @v_gmKind
AND GM_DIS = @v_gmDis
AND AD_NO = @v_adNo;';
SET @ParmDefinition = N'@v_udtId nvarchar, @v_scorerAgree nvarchar,
@v_e1P nvarchar, @v_e2P nvarchar, @v_e3P nvarchar, @v_e4P nvarchar, @v_e5P nvarchar,
@v_e6P nvarchar, @v_e1A nvarchar, @v_e2A nvarchar, @v_e3A nvarchar, @v_e4A nvarchar,
@v_e5A nvarchar, @v_e6A nvarchar, @v_point nvarchar, @v_eHit nvarchar, @v_e10 nvarchar,
@v_eX nvarchar, @v_gmId nvarchar, @v_gmYear nvarchar, @v_gmSex nvarchar, @v_gmMth nvarchar,
@v_gmKind nvarchar, @v_gmDis nvarchar, @v_adNo nvarchar';
EXEC sp_executesql @SQLString, @ParmDefinition, @v_udtId, @v_scorerAgree,
@v_e1P, @v_e2P, @v_e3P, @v_e4P, @v_e5P, @v_e6P, @v_e1A, @v_e2A, @v_e3A, @v_e4A, @v_e5A, @v_e6A
,@v_point, @v_eHit, @v_e10, @v_eX, @v_gmId, @v_gmYear, @v_gmSex, @v_gmMth,
@v_gmKind, @v_gmDis, @v_adNo;
END
Comment 1
-
처리짱
2019.01.08 12:41
프로파일러로 NEWUPDATEARROWCOUNTBYDISTANCE 이 프로시져를 잡아서 호출이 되는지 안되는지 부터 확인을 해보셔야 할거 같은데요..