0
를 업데이트SQL 멀티 표 4 개 테이블이
select * FROM migrate.ContractedServiceLevel CSL
JOIN migrate.CarePackageLineItem CPLI
ON CSL.ServiceLevel = CPLI.ServiceLevel
JOIN migrate.ContractedService CS
ON CSL.ServiceRef = CS.ServiceRef
JOIN Migrate.Contract CON
ON CON.ContractRef = CS.ContractRef
내가해야 할 일은 모든 서비스 참조를 계약 참조의 처음 2 자와 연결하고 기존 서비스 참조를 연결하는 것입니다. 이 같은
뭔가 :
SET ServiceRef = LEFT(con.ContractRef,2) + CS.ServiceRef
나는 동일한 서비스 REF되는 모든 결과가 있지만, 각각의 테이블 위의 select 문에 따라이 사용하여 정기적으로 업데이트를 수행했습니다. 내가 평평한 업데이트를 할 수없는 이유는 그들이 속한 계약에 따라 서비스 복제본 (복제본은 유효하지만 내 ETL이 아니므로 분할)을 분할해야하기 때문입니다.
답변은 CTE를 사용하는 것이 확실하지만, 이것들과 구현 방법에 대해서는 거의 익숙하지 않습니다. 여기서 중요한 것은 참조 무결성이 테이블 아래로 유지되어야한다는 것입니다.
도움을 주시면 감사하겠습니다.
편집 : (기본 문제에 영향을주지 않습니다하지만)
내가 테이블의 결합 내 초기에 실수를 한 것 같다. 나는이에 매우 이상 설계된 솔루션으로 올라와있다 : 원하는대로 내 위의 게시물에
CREATE TABLE #ServiceRefUpdate
(
CSLServiceRef varchar(100),
CSLID int,
CSServiceRef varchar(100),
CSID int,
ContractRef varchar(100),
ContractID int,
CPLIServiceRef varchar(100),
CPLIRef varchar(100),
)
INSERT INTO #ServiceRefUpdate
SELECT CSL.ServiceRef, CSL.RecordId, CS.ServiceRef, CS.RecordId,
CON.ContractRef, CON.RecordId, CPLI.ServiceRef, CPLI.CarePackageLineItemRef
FROM migrate.ContractedServiceLevel CSL
JOIN migrate.ContractedService CS
ON CSL.ServiceRef = CS.ServiceRef
JOIN Migrate.CarePackageLineItem CPLI
ON CPLI.ServiceRef = CS.ServiceRef
AND CPLI.ServiceLevel = CSL.ServiceLevel
JOIN Migrate.Contract CON
ON CON.ContractRef = CS.ContractRef
JOIN migrate.ContractStructure CONS
ON CPLI.ServiceLevel = CONS.ServiceLevel
AND CON.ContractType = CONS.ContractType
UPDATE #ServiceRefUpdate
SET CSLServiceRef = LEFT(ContractRef, 2) + CSLServiceRef,
CSServiceRef = LEFT(ContractRef, 2) + CSServiceRef,
CPLIServiceRef = LEFT(ContractRef, 2) + CPLIServiceRef
UPDATE migrate.ContractedServiceLevel SET ServiceRef = UP.CSLServiceRef
FROM migrate.ContractedServiceLevel CSL
JOIN #ServiceRefUpdate UP
ON UP.CSLID = CSL.RecordId
UPDATE migrate.ContractedService SET ServiceRef = UP.CSServiceRef
FROM migrate.ContractedService CS
JOIN #ServiceRefUpdate UP
ON UP.CSID = CS.RecordId
UPDATE migrate.CarePackageLineItem SET ServiceRef = UP.CPLIServiceRef
FROM migrate.CarePackageLineItem CPLI
JOIN #ServiceRefUpdate UP
ON UP.CPLIRef = CPLI.CarePackageLineItemRef
WHERE UP.CPLIRef = CPLI.CarePackageLineItemRef
DROP TABLE #ServiceRefUpdate
Apologies, MSSQL, 2014는 정확히 – Archeon
입니다. 마지막 'update'에서 : 'ON UP.CPLIRef = CPLI.CarePackageLineItemRef WHERE UP.CPLIRef = CPLI.CarePackageLineItemRef'는 중복됩니다. – HABO
고마워, 나는 이것을 또한 붙인 후에 실제로 그것을 제거하고 실제로 그것을 발견했다. – Archeon