여러개의 컬럼(다중열) 업데이트

여러개의 컬럼(다중열) 업데이트

UPDATE
    Table_A
SET
    Table_A.col1 = Table_B.col1,
    Table_A.col2 = Table_B.col2
FROM
    Some_Table AS Table_A
    INNER JOIN Other_Table AS Table_B
        ON Table_A.id = Table_B.id
WHERE
    Table_A.col3 = 'cool'

또는

update zTable1
set cValue = x.cValue
from (
        select cFk, cValue from zTable2
) x
where  zTable1.cPk = x.cFk

Job 스케쥴러 설정 방법

Job 스케쥴러 설정 방법

1. 개체 탐색기의 SQL Server 에이전트 - 작업 (우클릭)  - 새작업 클릭

2. 일반에서 이름과 설명을 작성 하고 단계

3. 단계 에서 새로만들기를 클릭 하고 단계 이름과 데이터 베이스 선택, 명령 구문을 입력 

4. 일반 아래 고급 (별다른 설정 없음)

5. 일정은 스케줄러 반복될 설정을 입력

6. 경고, 알림, 대상  (별다른 설정 없음)

7. 작업폴더 아래 등록 되었는지 확인 
CDC(변경 데이터 캡처, Change Data Capture Functions) 설정

CDC(변경 데이터 캡처, Change Data Capture Functions) 설정

-- 1. cdc 설정
select is_cdc_enabled, * from sys.databases -- cdc가 걸려있는 DB 확인
go
use db1 -- cdc를 설정할 DB로 이동
go
exec sys.sp_cdc_enable_db -- DB에 cdc 설정
go
--메시지 22830, 수준 16, 상태 1, 프로시저 sp_cdc_enable_db_internal, 줄 193
--데이터베이스 db1이(가) 변경 데이터 캡처용으로 설정됨을 나타내는 메타데이터를 업데이트할 수 없습니다. 명령 'SetCDCTracked(Value = 1)'을(를) 실행하는 동안 오류가 발생했습니다. 반환된 오류는 15517: '보안 주체 "dbo"이(가) 없거나 이 유형의 보안 주체를 가장할 수 없거나 사용 권한이 없기 때문에 데이터베이스 보안 주체로 실행할 수 없습니다.'입니다. 동작 및 오류를 사용하여 오류의 원인을 파악하고 요청을 다시 제출하십시오.
--> sp_changedbowner 'sa' -- sa권한으로 변경 후 실행
--exec sys.sp_cdc_disable_db -- DB해제
-- cdc 기록할 테이블 설정
EXEC sys.sp_cdc_enable_table
@source_schema = N'play', -- 스키마
@source_name = N'users', -- 테이블명
@role_name = NULL,
@capture_instance = N'sync_portal', -- 기록될 이름
@supports_net_changes = 1, -- 캡처 인스턴스에 순 변경 함수 생성
@captured_column_list = N'user_id,x_user_id, manager_id,grade, recommand_level', -- 변경시 등록되는 컬럼명
@filegroup_name = N'PRIMARY'
go
--메시지 22943, 수준 16, 상태 1, 프로시저 sp_cdc_enable_table_internal, 줄 313
--순 변경 추적에 대한 행을 고유하게 식별하는 데 사용되는 열이 캡처된 열 목록에 포함되어 있어야 합니다. 원본 테이블의 기본 키 열이나 매개 변수 @index_name에 지정된 인덱스에 대해 정의된 열을 캡처된 열 목록에 추가한 후 작업을 다시 시도하십시오.
--> pk @captured_column_list에 들어가 있어야 한다.
--exec sys.sp_cdc_disable_table -- Table 해지
--@source_schema = N'play',
--@source_name = N'users',
--@capture_instance =N'sync_portal'
select * from cdc.change_tables -- 등록된 cdc 내역 확인
select * from cdc.sync_portal_CT order by __$start_lsn desc -- cdc에서 쓰여진 내역 확인 (* 해당이름_CT 형태로 호출해야 한다.)
-- 열 __$operation은 변경 내용과 연결된 작업 기록. 1 = 삭제, 2 = 삽입, 3 = 업데이트(이미지 이전) 및 4 = 업데이트(이미지 이후)
-- 2. 테스트
-- 테스트 값 등록
--select top(100) x_user_id,userid,grade,grade,* from db1.play.users a order by a.user_id desc
select top(100) x_user_id,manager_id,userid,grade,grade,* from db1.play.users a where user_id = 12345
select top(100) user_id,manager_id,grade,* from [LOGIN_SERVER].Vanilla.dbo.Users a where user_id = 12345
select count(*) from db1.cdc.sync_portal_CT
select a.x_user_id, a.manager_id, a.grade from (select ROW_NUMBER() over(partition by x_user_id order by __$start_lsn desc) as irow, __$start_lsn, x_user_id, manager_id, grade from cdc.sync_portal_CT with(nolock) where __$operation =4) a where irow = 1
update db1.play.users set manager_id = 111673 where x_user_id = 12345
update db1.play.users set grade = 2 where x_user_id = 12345
update [LOGIN_SERVER].Vanilla.dbo.Users set user_nm = getdate() where user_id = 12345
-- exec dbo.sp_users_sync
-- 테스트 결과 확인 (아이디별 최종 변경된 값만 확인)
-- 3. 프로시져 생성 (cdc 기능 동기화, 아이디별 최종 변경된 값만 적용 )
create procedure dbo.sp_users_sync
with encryption
as
begin
begin try
declare @t_user_sync table(t_x_user_id bigint, t_manager_id bigint, t_grade smallint);
-- 테이블 변수에 변경된 정보 넣기
insert into @t_user_sync
select a.x_user_id, a.manager_id, a.grade from (select ROW_NUMBER() over(partition by x_user_id order by __$start_lsn desc) as irow, __$start_lsn, x_user_id, manager_id, grade from cdc.sync_portal_CT with(nolock) where __$operation =4) a where irow = 1
--select * from @t_user_sync
-- 링크서버 변경
if((select count(t_x_user_id) from @t_user_sync) > 0)
begin
update a
set a.manager_id = b.t_manager_id, a.grade= b.t_grade, a.recommand_last_update = getdate()
from
[LOGIN_SERVER].Vanilla.dbo.Users AS a
inner join @t_user_sync AS b
on a.user_id = b.t_x_user_id
--where a.user_id = b.t_x_user_id
truncate table cdc.sync_portal_CT
end
end try
begin catch
IF @@trancount > 0
begin
ROLLBACK TRANSACTION;
end
end catch
end
go
grant exec on dbo.sp_users_sync to public
go
-- 4. 스케줄러 등록
스케줄러로 위 프로시저(dbo.sp_users_sync) 반복
JSON parser사용 (JSON Text를 JSON Object로 변환)

JSON parser사용 (JSON Text를 JSON Object로 변환)

JSON parser(JSON Text를 JSON Object로 변환)
- JSON.org 제공하는 JSON parser사용
- JSON parser는 JSON text만 받아들이고 다른 스크립트는 거부

예)
var obj = JSON.parse(returnValue.responseText);
// -> { id:"kim", sex:"male" }

- 키와 값을 모두 쌍따옴표(")로 묶어주는 문법을 정확하게 지켜주어야 한다.
{ "id":"kim", "sex":"male" }

- JSON.parse() 사용하기 위해서는 json2.js가 필요
- json2.js는   JSON의 편리한 사용을 위해 만든 JSON API의 새버전
- API에는 2개의 메서드가 들어있는데 JSON.stringify()와 JSON.parse().
- JSON.stringify()는 JSON.parse()와는 완전히 반대로 JSON 객체를 주면 JSON 텍스트로 변환.

Grunt 설명 및 사용(grunt-uisemin, jsmin)

1. Grunt 란
- Grunt is a task-based command line build tool for JavaScript projects.
- 자바스크립트 용 빌드 툴
- Node설치 필요

1. Grunt 설치
- Command Line Interface(CLI)를 설치 (옵션 -g  global설치)
$ npm install -g grunt-cli
- 프로젝트 폴더의 root경로에서 grunt를 설치 (옵션  --save-dev  package.json 파일과 연동)
$ npm install grunt --save-dev
- package.json 파일 생성
$ npm init
- Gruntfile.js 파일 생성
- package.json과 같은 위치(프로젝트 폴더의 root경로)에 Gruntfile.js 생성. (Grunt가 실행될 때, 이 파일을 보고 어떠한 동작을 할지 결정하는데 쓰인다.)


2. grunt-uisemin란
- js, css 파일 팩키징
- usemin에서 concat, uglify, cssmin, requirejs 플러그인 실치필요
- 설치
$ npm install grunt-usemin --save-dev

2. grunt-uisemin설정
-Gruntfile.js  파일 편집










- html 파일 편집
  <!-- build:css ../../../FrontEnd/home.zeus/all_css.min.css -->
    <link type="text/css" rel="stylesheet" href="/css/jquery-ui-1.12.1.min.css" />
    <link type="text/css" rel="stylesheet" href="/css/a.css" />
  <!-- endbuild -->
  <!-- build:js ../../../FrontEnd/home.zeus/all_script.min.js -->
    <script type="text/javascript" src="/common/js/jquery-3.1.1.min.js"></script>
    <script type="text/javascript" src="/common/js/jquery.signalR-2.2.2.min.js"></script>
    <script type="text/javascript" src="/common/js/socket.io-1.7.3.min.js"></script>
  <!-- endbuild -->

- cmd에서 루트 경로로 이동후 아래 명령어 실행
grunt useminPrepare concat uglify cssmin


3. jsmin란
- javascript를 min파일 형식으로 압축
- http://crockford.com/javascript/jsmin.html 이동하여 "zip file containing an MS-DOS.exe file" 링크로 다운로드

3. jsmin 사용
jsmin < ./common/js/home.default.js > ./common/js/home.default.min.js
jsmin < ./common/js/home.function.js > ./common/js/home.function.min.js