반응형

SQL SERVER AFTER 트리거 사용 시

특정 컬럼 업데이트를 감지하여 작동하는 쿼리 예제 입니다.

 

흔히 이력 정보를 저장할 때, 특정 컬럼의 값이 변하는지 감지하고

감지하는 컬럼의 값이 변할때만 작동하도록 해야하는 상황이 많습니다.

 

예제.

사용자 테이블과 사용자 이력 테이블 트리거 작성

 

트리거를 가지고 있는 USERS 테이블 

*[USER_ID], [USER_NM], [USER_PWD], [USER_ST], [EDT_DT]

 

USERS 테이블의 이력을 저장할 USERS_HIS 테이블

*[USER_ID], *[HIS_IDX], [USER_NM], [USER_ST], [EDT_DT]

 

목표는 USERS 테이블의 [USER_ST] (유저 상태)컬럼 값이 변할 때 이력을 저장하는 것 입니다.

[USER_ST]가 변할 때 USERS_HIS 테이블에 데이터를 삽입하도록 트리거를 작성하면 됩니다.

 

예제는 다음과 같습니다.

 

 

 

 

트리거 INSERTED 와 DELTED 시에는 그냥 이력을 삽입하면되니 UPDATED만 예제로 작성하겠습니다.

 

1. 트리거 쿼리문

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		davi
-- Create date: 210323
-- Description:	Insert history when [USERS]'s USER_ST updated
-- =============================================
CREATE TRIGGER [dbo].[TRG_USERS_UPDATED]
   ON  [dbo].[USERS]
   AFTER INSERT,DELETE,UPDATE
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.

	SET NOCOUNT ON;
    --USER 테이블에서 이력을 저장할 컬럼 변수 생성
	DECLARE
	@USER_ID varchar(20),
	@HIS_IDX int,
	@USER_NM varchar(10),
	@USER_ST	char(1),
	@EDT_DT datetime

		--I : INSERTED
		--U : UPDATED
		--D : DELETED
		DECLARE @TRG_ACTION char(1)

		--INSERTED
		SET @TRG_ACTION = 'I'

		--U : UPDATED
		--D : DELETED
		IF EXISTS(SELECT * FROM deleted)
		  BEGIN
		    SET @TRG_ACTION = (CASE WHEN EXISTS (SELECT * FROM inserted) THEN 'U' ELSE 'D' END)
		  END


		  --UPDATED 만 작성
		  IF @TRG_ACTION = 'U'
		   BEGIN
			SELECT 
			  @USER_ID = INS.USER_ID, @USER_NM = INS.USER_NM, @USER_ST = INS.USER_ST, @EDT_DT = INS.EDT_DT
			FROM DELETED DEL
			JOIN INSERTED INS ON DEL.USER_ID = INS.USER_ID --PK로 JOIN
			WHERE 
			DEL.USER_ID = INS.USER_ID AND
			DEL.USER_ST != INS.USER_ST --컬럼 값이 다르면 USER_ST가 변경되었을때이다.  
		   END

		   IF(@USER_ID IS NOT NULL)
		     BEGIN
			   --USERS_HIS 테이블에서 해당 USER_ID의 변경 순서 +1
			   SELECT @HIS_IDX = ISNULL(MAX(HIS_IDX),0)+1 FROM USERS_HIS WITH(NOLOCK) WHERE USER_ID = @USER_ID

			   --USERS_HIS 삽입
			   INSERT INTO USERS_HIS 
			   (USER_ID, HIS_IDX, USER_NM, USER_ST, EDT_DT) VALUES
			   (@USER_ID, @HIS_IDX, @USER_NM, @USER_ST, @EDT_DT)
			 END

END
GO

 

해당 쿼리는 업데이트 후 정보를 이력으로 저장 했습니다.

 

 

 

2. 트리거 검증 

 

 1) 검증 쿼리

--변경전
SELECT * FROM USERS

SELECT * FROM USERS_HIS

--USER_ST 및 다른 값 업데이트
UPDATE USERS
  SET USER_ST = 2, USER_NM = '이지은', EDT_DT = GETDATE()
WHERE USER_ID = 'davi'

-- USER_ST 업데이트 후
SELECT * FROM USERS

SELECT * FROM USERS_HIS

 

 2) 결과

 

 

간단하게 작성하려고 했는데 은근히 시간이 오래 걸리네요.

 

참고 하시고 오류 있으면 댓글 부탁드립니다.

반응형
반응형

 

오버맥스 그립 후기

 

유명한 오버맥스 그립을 구매해봤습니다.

 

당기는 운동을 할때 손목에 부담을 줄여주고

  

여러 각도로 등에 자극을 줄 수 있다고 합니다.

 

실제로 바디빌더 분들도 많이 사용하시더라구요

 

마침 구매할때 크리스마스 시즌이라

 

한정판 컬러로 구매해봤습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

운동 후기 - 풀업

 

 

등운동은 주로 풀업, 랫풀다운, 바벨로우를 즐겨하는데

 

세 운동에 모두 오버맥스 그립을 이용하여 운동해봤습니다.

 

홈짐이다 보니 그립을 연결하면 풀업시 무릎을 접어야하는데

 

무릎을 접은게 문제인지 그립이 안맞는지

 

개인적으로 조금 불편한감이 있었습니다

 

그래도 풀업시에 가끔 색다른 자극을 위해 사용하고 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

운동후기 - 랫풀다운, 바벨로우

 

 

랫풀다운은 일자바에 연결하여

 

와이드, 내로우 여러가지 각도를 사용해서 사용해봤습니다.

 

랫풀다운시에 확실히 자극이 좋은 것 같습니다. 

 

바벨로우는 가끔 손목에 불편한감이 있었는데

 

오버맥스그립을 사용하니 확실히 손목이 편한 것 같습니다. 

 

무엇보다 홈짐에 포인트 인테리어로 아주 좋네요..

 

역시 홈짐은 인테리어라는걸 한번 더 느낍니다.

 

반응형
반응형

 

MS SQL에서 해당 테이블이 존재하면 실행되는 조건문입니다.

 

 

예제)

IF EXISTS 사용 시 가장 많이 사용되는 방법인,

조건에 따라 INSERT 와 UPDATE 를 실행하는 예제입니다. 

 

USER_INFO 테이블에 USER_ID 가 '홍길동'이라는 사용자가 있는지 확인하고

'홍길동'이 없다면 INSERT 문을 실행하고

'홍길동'이 있다면 UPDATE 문을 실행하도록 하겠습니다.

 

IF EXISTS (SELECT USER_ID FROM USER_INFO WHERE USER_ID ='홍길동' ) --조건 설정
	BEGIN
		--조건 결과 값이 있을 때
		UPDATE USER_INFO
	END
ELSE
	BEGIN
		--조건 결과 값이 없을 때
		INSERT INTO USER_INFO    
	END

 

 

하지만 조건 결과가 없을 때 한 개만 사용하고 싶다면

 

IF NOT EXISTS 를 사용할 수 있습니다.

 

--조건 결과 값이 있을 때만 사용

IF EXISTS (SELECT 문)

    BEGIN

        '실행할 쿼리'

    END

 

--조건 결과 값이 없을 때만 사용

IF NOT EXISTS (SELECT 문)

    BEGIN

       '실행할 쿼리'

    END

--조건 결과 값이 있을 때만 사용
IF EXISTS (SELECT 문)
	BEGIN        
		'실행할 쿼리'    
	END
    
 
--조건 결과 값이 없을 때만 사용
IF NOT EXISTS (SELECT 문)
	BEGIN
		'실행할 쿼리'
	END

 

반응형
반응형

페이지 양이 많은 pdf파일을 볼때

마지막으로 봤던 페이지가 자동으로 저장되지 않아 불편함을 느끼셨을텐데요

Arcobat Reader에서 한가지 설정만 해주신다면

문서를 닫을때 마지막 페이지를 저장할 수 있습니다.

 

 

 

1. 편집 > 기본설정

 

2. 문서 탭 문서를 다시 열 때 마지막 보기 설정 복원 (체크)

 

 

위와 같이 설정하시면

문서를 닫을때 마지막 페이지가 열리도록 변경됩니다.

 

 

 

도움이 되셨다면 '공감' 버튼 클릭 부탁드립니다.

반응형
반응형

어도비 아크로뱃 리더를 통해 pdf파일을 실행하면

 

 

 

 

상기 이미지와 같이 옆쪽 사이드바가 자동으로 실행됩니다.

 

 

 

방법은 두가지로

첫번째 방법은 옵션을 수정하여 사이드바를 숨기는 방법으로

pdf파일을 실행하는 일반사용자가 사용하기에 적합하고,

 

두번째 방법은 xml을 수정하는 방법으로, 사이드바가 완전히 제거되며

프로그래머가 아크로뱃 리더 SDK를 사용하여 애플리케이션에서 pdf파일을 실행하였을때

사이드바가 사라지지 않는 문제점을 해결할수 있습니다.

 

1. 옵션 변경 방법

 

1) 보기 창에서 도구 창 체크 해제

 

 

2) 우측 하단 도구 창 숨기기 버튼 클릭

 

 

 

 

 

 

 

 

3) 편집 > 기본 설정

 

 

4) 도구창의 현재상태 기억 체크

 

 

 

2. xml 수정 방법

 

1)  xml 파일 복사

 

 

 

C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroApp\

사용자 국가의 디렉토리(한국에 경우 KOR)에 있는

Viewer.aapp 파일을 복사하여 바탕화면에 저장합니다.

 

2) 복사한 파일 편집

 

 

 

바탕화면에 복사한 Viwer.aapp 파일을 메모장으로 실행합니다.

 

 

 

3) xml 파일 수정

 

 

 

파일내 <Layouts> </Layouts> 코드를 삭제합니다.

 

 

 

 

4) 적용

 

 

 

 

바탕화면에서 수정한 파일을 1)번 경로에 다시 붙여넣습니다.

 

5) 적용 확인

 

 

 

pdf파일을 실행하여 Arcrobat Reader 사이드바가 제거되었는지 확인합니다.

 

첫번째 방법과 다르게 우측 사이드바가 완전히 제거 됩니다.

 

 

도움이 되셨다면 하단 ♡공감 클릭 부탁드립니다.

감사합니다.

 

반응형
반응형

이번에 서버 PC를 바꾸게 되어서

 

마이그레이션 진행 중에 작업 스케줄러의 기록이 표시되지 않아서 

 

노안이 왔는지 다시 설정을 하려고 하는데 눈에 들어오지가 않았습니다.. 

 

 

우측 '모든 작업기록 사용'을 누르면 작업기록이 표시됩니다.

 

정말 간단한데 한참을 찾았네요.

 

저와 같은 분들이 계실 것 같아 업로드합니다.

반응형
반응형

중소기업이나 데이터 양이 많지 않은 기업에서

 

무료 버전인 Express 버전을 사용하기도 합니다.

 

SQL SERVER Express 버전은 기본적으로 스케줄러 기능이 없기 때문에

 

윈도우 스케줄러를 통한 자동 백업을 사용해야 합니다.

 

 

 

1. 백업 쿼리 파일 생성

 

 

1) 전체 백업

 

 

BACKUP DATABASE ['DB명'TO DSIK = '백업 데이터 저장 경로' WITH INIT, STATS = 10

 

쿼리를 실행시켜 정상 동작하는지 확인한 뒤에

 

 

쿼리 파일을 저장합니다.

 

2) 로그 백업

 

 

BACKUP LOG TEST2 TO DISK = '백업 데이터 저장 경로'

 

로그 쿼리도 동일한 방법으로 쿼리 파일로 만들어 저장합니다.

 

 

 

2. 윈도우 작업스케줄러 설정

 

이제 윈도우 작업 스케줄러로 특정 시간마다 백업 쿼리가 실행되도록 설정할 것입니다.

 

 

 

 

새 작업을 만들고 스케줄 이름을 입력합니다.

 

 

트리거에서 시간 및 옵션을 백업 정책에 맞게 설정합니다.

 

저는 임의로 매일 오후 11시에 백업하도록 설정했습니다.

 

다음은 동작 탭에서 

 

프로그램/스크립트 필드에 sqlcmd -s 서버 주소, 포트번호 -E -i 를 입력합니다.

예) sqlcmd -s 192.168.0.3, 1433 -E -i

 

다음 인수 추가 필드에

1번에서 만들어 놓은 쿼리 파일의 경로를 입력합니다.

예) D:\DB_QUERY_TEST2_FULL.back

 

동작 설정 전에 스크립트가 잘 실행되는지 검증할 필요가 있으니,

명령 프롬프트(cmd)를 실행하여 작성한 스크립트를 검증합니다.

 

검증이 완료되면 작업 스케줄러로 돌아가 스케줄러를 저장합니다.

 

검증 시 스크립트가 실패한다면 이 글을 참조하셔서 TCP/IP 접속 에러를 확인하세요.

 

 

MS SQL TCP/IP 접속 에러 해결

SQL Server에 연결을 설정하는 중에 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 서버를 찾을 수 없거나 액세스할 수 없습니다. SQL Server가 원격 연결을 허용하도록 구성되어 있는지 확인하십시오...

seodavi.tistory.com

 

글에 문제가 있다면 댓글로 지적해주세요.

확인하고 수정하겠습니다.

반응형
반응형

SQL Server에 연결을 설정하는 중에 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다.

서버를 찾을 수 없거나 액세스할 수 없습니다. SQL Server가 원격 연결을 허용하도록 구성되어 있는지 확인하십시오.

 

위의 오류 메세지는 외부 접속이 허용되지 않을때 발생되는 오류 입니다.

 

확인해야할 포인트는 3가지 입니다.

 

 

 

1. TCP/IP 사용

 

 1) SQL Server Configuration Manager(SQL SERVER 구성관리자) 실행

 

 

 SQL Server 구성관리자를 실행합니다.

 

 

 2) TCP/IP 사용하도록 변경

 

 

 SQL Server 네트워크 구성에서 TCP/IP를 사용하도록 변경 합니다.

 

 

2. PORT 설정

 

 외부에서 접속하려면 TCP포트를 설정해야 합니다.

 

 

 기본포트인 1443으로 설정합니다.

 

 

 

 SQL Server 서비스를 다시 시작합니다.

 

3. 외부 연결 허용 설정

 

 1) SSMS 실행

 2) 서버 속성 선택 

 3) 이 서버에 대한 원격 연결 허용 '체크'

 

 

이상입니다.

 

 

반응형
반응형

 

윈도우10 기본설정으로 

아래와 같이 작업표시줄에 파일 검색 기능이 표시됩니다.

 

윈도우10 작업표시줄 검색 기능

 

 

윈도우 파일 검색 기능 숨김 숨김해제 방법

 

1) 숨김

작업표시줄 - 마우스 우클릭 - 검색 - 숨김

 

2) 표시

작업표시줄 - 마우스 우클릭 - 검색 - 검색 상자 표시

반응형
반응형

무료 UI툴인 Pencil Project 입니다.

 

최근에는 사용을 안해서 몰랐는데 최신버전이 2019년 10월로

 

유지보수가 잘 되고있네요.

 

 

■ 다운로드 경로

 

Home - Pencil Project

An open-source GUI prototyping tool that's available for ALL platforms. Pencil is built for the purpose of providing a free and open-source GUI prototyping tool that people can easily install and use to create mockups in popular desktop platforms. The late

pencil.evolus.vn

 

전에는 자주사용했었는데,

 

요즘에는 파워포인트로 많이해서 자주 쓰지는 않게되네요.

 

윈도우 앱 설계시 초기단계에 쓰기 꽤 좋습니다.

 

컨트롤들이 귀여운 맛이 있어서 맘에 듭니다.

 

 

제가 간단한 사용자 관리 프로그램의 UI를 작성해봤습니다.

 

ms paint처럼 사용하기도 편하고

 

윈도우, 모바일 컨트롤을 기본적으로 제공해서

 

어디서 이미지를 따오거나 할 필요없이 UI설계가 가능합니다.

반응형

+ Recent posts