SQL 스 크 립 트 를 이용 하여 서로 다른 데이터베이스 에 데 이 터 를 가 져 와 중복 을 피 하 는 세 가지 방법
4023 단어 sql 스 크 립 트데이터 가 져 오기데이터 뱅 크
어떤 언어 든 코드 에 중복 되 는 코드 를 보면 패키지 로 재 활용 하고 싶 습 니 다.SQL 에서 도 마찬가지 입 니 다.만약 에 우리 가 인터페이스 가 없 으 면 자주 해 야 하 는 조작 이 필요 합 니 다.우 리 는 스 크 립 트 를 써 서 다음 에 다시 쓰 지 않도록 하 겠 습 니 다.그러나 그 중에서 문제 가 발생 했 습 니 다.이 문 제 는 저도 별로 신경 쓰 지 않 았 습 니 다.어느 순간 에 첫째 는 제 가 쓴 스 크 립 트 를 보고 웃 으 며 한 마디 물 었 습 니 다.당신 의 스 크 립 트 가 반복 되 는 지 물 었 습 니 다.저 는 어 리 석 었 습 니 다.이런 상황 을 피 할 수 없 었 습 니 다.예 를 들 어 삽입 작업 을 하면 다음 에 다른 동료 가 스 크 립 트 를 수행 할 때 중복 데 이 터 를 삽입 할 수 있 습 니 다.온라인 이 라면 어 리 석 었 습 니 다.그래서 첫째 는 저 에 게 수업 을 해 주 었 습 니 다.그 후에 스 크 립 트 를 쓸 때마다 논리 적 판단 을 가 했 습 니 다.예,중복 실행 이 가능 합 니 다.
다음은 최근 프로젝트 에서 만난 장면 을 이야기 하 겠 습 니 다.
화제 도입
국민 성인의 체질 테스트 에서 성년 의 나 이 를 계산 해 야 하고 체 측 연령 은 20-59 세이 다.만약 에 현재 날짜 가 성인의 생년월일 을 초과 하지 않 으 면 나 이 는 1 로 줄어든다.그렇지 않 으 면 줄 지 않 는 다.예 를 들 어 성인의 생년월일 은 1991-11-01 이다.이때 성인의 체 측 연령 은 25 세이 고 1991-10-01 이면 체 측 연령 은 26 세이 다.이것 이 첫걸음 이다.두 번 째 단 계 는 그룹 을 나 누 는 것 이다.각 연령 대의 사람들 이 테스트 하 는 항목 이 다르다.즉,연령 에 따라 그룹 을 나 누 어야 한다.체 측 문서 에서 3 조로 나 뉘 는데 한 조 는 남성 20-39 세,한 조 는 여성 20-39,마지막 조 는 남녀 40-59 로 나 누 지 않 는 다.마지막 으로 우리 가 해 야 할 일 은 서로 다른 연령 대 와 성별 에 따라 조 를 나 누 는 것 이다.
우 리 는 아래 표를 작성 한다.
20~39 세의 남성 도 있 고 20~39 세의 여성 도 있 음 을 알 수 있다.40~59 세 남성 등 도 있 는데,문 제 는 SQL 을 어떻게 활용 해 국민 성인 체질 테스트 문서 에 따라 이 같은 성인의 실제 나 이 를 계산 하 느 냐 하 는 것 이다.
SELECT Id ,
DATEDIFF(YEAR, Birthday, GETDATE()) AS age ,
Name
FROM dbo.t1
상기 조회 가 현저히 정확 하지 않 은 것 을 보 았 습 니 다.생년월일 이 되 지 않 은 사람의 나 이 는 1 을 빼 지 않 았 습 니 다.이때 우 리 는 DATEPART 함 수 를 이용 하여 첫 번 째 매개 변 수 를 dayofyear 로 지정 할 수 있 습 니 다.이 매개 변 수 는 지정 날짜 가 이 해 의 일수 임 을 나타 냅 니 다.예 를 들 어 우리 가 현재 며칠 이 지 났 는 지 알 수 있 습 니 다.
SELECT DATEPART(dayofyear, GETDATE())
SELECT DATEPART(dayofyear, '2017-12-31')
우 리 는 생년월일 의 일수 와 현재 날짜 의 일 수 를 통 해 현재 날짜 일수 보다 크 면 생일 이 아직 도착 하지 않 았 음 을 설명 하고 그렇지 않 으 면 1 을 뺀 다.
SELECT Id ,
DATEDIFF(YEAR, Birthday, GETDATE())
- CASE WHEN DATEPART(DAYOFYEAR, Birthday) > DATEPART(DAYOFYEAR,
GETDATE()) THEN 1
ELSE 0
END Age ,
Name
FROM dbo.t1
이때 우 리 는 연령 대의 구분 을 완 성 했 고,다음은 다른 데이터베이스 테스트 2 에 삽입 합 니 다.여기 서 내 가 생각 할 수 있 는 것 은 두 가지 방식 이다.만약 다른 환영 보충 이 있다 면.
LEFT JOIN ....IS NULL
우 리 는 왼쪽 연결 을 이용 하여 삽입 을 하고 중복 되면 삽입 해 야 할 표 의 메 인 키 는 반드시 NULL 이 아니 므 로 NULL 판단 을 추가 하면 중복 삽입 문 제 를 제거 할 수 있 습 니 다.
INSERT INTO test2.dbo.t2
( UserId ,
Birthday ,
Gender ,
Name
)
SELECT t1.Id ,
t1.Birthday ,
t1.Gender ,
t1.Name
FROM dbo.t1 AS t1
LEFT JOIN test2.dbo.t2 AS t2 ON t1.Id = t2.UserId
WHERE t2.Id IS NULL
다시 실행 할 때 영향 을 받 은 줄 수 를 0 으로 되 돌려 줍 니 다.
NOT EXISTS/NOT IN
INSERT INTO test2.dbo.t2
( UserId ,
Birthday ,
Gender ,
Name
)
SELECT t1.Id ,
t1.Birthday ,
t1.Gender ,
t1.Name
FROM dbo.t1 AS t1
WHERE NOT EXISTS(SELECT t2.UserId
FROM test2.dbo.t2 t2
WHERE t2.UserId = t1.Id)
총결산이 절 에 서 는 SQL 스 크 립 트 를 사용 하여 중복 삽입 문 제 를 피 하 는 동시에 생년월일 에 따라 실제 나 이 를 조회 하 는 방법 을 설명 합 니 다.
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
sqlserver 는 SSMS 를 사용 하여 sql 스 크 립 트 를 실행 하 는 6 가지 방법다음은 sql 스 크 립 트 를 실행 하 는 다섯 가지 방법 을 설명 합 니 다.다음 과 같 습 니 다. 한 회의 토론 에서 여러분 은 저 에 게 SSMS 를 사용 하여 sql 스 크 립 트 를 실행 하 는 방법 을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.