저는 SQL과 SQL 서버에 익숙하지 않으므로 다음 문제에 대한 도움을 주시면 감사하겠습니다.SQL 서버 2012에서 두 테이블을 사용하여 병합 쿼리
새로운 가격으로 주가 테이블을 업데이트하려고합니다.
테이블에는 공유 코드, 날짜, 가격의 세 열이 있습니다. 당신이 상상할 수 있듯이 당신이 공유 코드와 각각에 대해 10 년 데이터의 수천이있는 경우
비중 코드 + 일 = PK
하면, 테이블은 매우 큰 얻을 수 있습니다. 그래서 공유 ID 테이블이라는 별개의 테이블을 만들고 첫 번째 테이블에서 대신 공유 ID를 사용합니다. 정수로 검색하면 문자열보다 빠르기 때문에 쿼리의 속도가 빨라진다는 사실을 확실히 알고있었습니다.
Table 1 = Share_code_ID (int), Date, Price
Table 2 = Share_code_ID (int), Share_name (string)
이 그래서 내가 공유 ZZZ에 대한 현재의 가격으로 테이블/S를 업데이트 할 가정 해 봅시다 :
그래서, 나는 다음과 같이 두 테이블을 요약합니다. Share_code_ID 난 그냥- 봐가 발견되면, 업데이트 표 1 : 내가 필요 Share_code_ID를 찾을 수없는 경우 두 테이블을 모두 업데이트하십시오.
이제 Share_code_ID가 새 코드에 대해 생성되는 방법을 무시해 보겠습니다. 나중에 걱정할 것입니다.
나는 느슨하게 다음과 같은 구조를 기반으로 병합 쿼리를 사용하려고하지만, 내가 뭐하는 거지 아무 생각이없는거야 : 어떤 도움을 주시면 감사하겠습니다MERGE INTO [Table 1]
USING (VALUES (1,23-May-2013,1000)) AS SOURCE (Share_code_ID,Date,Price)
{ SEEMS LIKE THERE SHOULD BE AN INNER JOIN HERE OR SOMETHING }
ON Table 2 = 'ZZZ'
WHEN MATCHED THEN UPDATE SET Table 1.Price = 1000
WHEN NOT MATCHED THEN INSERT { TO BOTH TABLES }
합니다. ID는 표 2에서 발견되지 주어 졌을 때 source table
당신은 행동을하고 싶지에 대한
http://catb.org/~esr/faqs/smart-questions.html 샘플 데이터가없고 오류 텍스트도없고 질문이 없습니다. 여기에 대해 말할 것도 없습니다. –
1) 저장 프로 시저로 시도해보십시오. 입력에 Share_name, Date 및 Price 및 'ZZZ'를 전달해야합니다. 2) 공백과 작은 글자를 사용하여 표 및 열의 이름을 지정하지 마십시오. 신원 확인자를 분리하면 완전히 혼란스러워 보입니다. 실제로 표준 "표 1"또는 반 표준 [표 1]을 사용하는 것은 매우 성가시고 둔합니다. 표 2 = 'ZZZ'는 의미가 없습니다! –