원하는 방식대로 비즈니스 요구 사항을 수행하는 데 어려움을 겪고 있습니다. 나는 다른 방법으로 이것을하기위한 제안에 대해서도 열려있다.TSQL - 함수를 파생 테이블로 사용하는 문제 및 오류
기본적으로 Employee 및 Dependent 주소의 컨텍스트에서 상당한 데이터 입력 오류가 있습니다. 종업원은 123 SW 5th St.
과 같을 수 있으며, 부양 가족은 123 S.W. 5th St
으로 입력 할 수 있습니다. 주소가 동적인지, 즉 직원과의 관계가 같은지를 동적으로 비교해야합니다.
클라이언트와 나는 공간 분리 문자로 주소를 분할하고 Employee와 Dependent의 처음 세 개의 분할을 비교해야하며 두 개가 일치하면 주소가 동일하다고 결정했습니다. 문자열을 분할하는 코드가 제대로 작동하고 있습니다.
내가했다 접근이 있었다 :
- 세 개의 문자열로 직원 주소를 분할하는 세 개의 문자열로 종속 주소를 분할하고 변수 테이블
- 사용하는 기능에 반납하는 함수를 사용하여 테이블 변수로 반환합니다.
- 이러한 테이블을 파생 테이블로 사용하고 여러 다발의 조인을 의도적으로 함께 결합하십시오.
- 다 대다 조인에서 반환 된 레코드 수가> = 2 인 경우 주소는 동일합니다. 다음은
코드가 모습입니다 같은 : 나는 점점 오전 오류가 The multi-part identifier "#CoDepBenTable.DEV_EmpAddress" could not be bound.
입니다
UPDATE #CoDepBenTable
SET ContactAddressIsDifferent = CASE WHEN COUNT(*) > 1
THEN 'N'
ELSE 'Y'
END
FROM (SELECT *
FROM dbo.fn_CompareAddresses(#CoDepBenTable.DEV_EmpAddress)
)AS D
JOIN (SELECT *
FROM dbo.fn_CompareAddresses(#CoDepBenTable.ContactAddressLine1)
) AS E
ON E.AddressPart = D.AddressPart
및 The multi-part identifier "#CoDepBenTable.ContactAddressLine1" could not be bound.
이 기능은 데이터와 동일한 데이터베이스에 dbo
스키마에 생성됩니다 비록 내가 처음에 임시 테이블에 데이터를 넣은 다음 임시 테이블을 업데이트하려고 시도했지만.
이 문제를 해결할 수있는 방법이 있습니까? 나는 왜 내가 여기에 오류를 받는지 알 수 없다.
는'SELECT 당신이 원하는 것을 할 수있는 좋은 가이드, Y 또는 N와 마크 ContactAddressIsDifferent * 생각 D'는 SELECT * 에서 와야합니다. #CoDepBenTable 교차 적용 dbo.fn_CompareAddresses (DEV_EmpAddress) x 여기서 ) AS D' 선택하지 않은 표의 열을 전달할 수 없습니다. 이 함수는 테이블 반환 함수이므로 [apply를 사용해야합니다.] (https://dba.stackexchange.com/questions/86143/how-to-join-a-table-with-a-table-valued-function) –
scsimon
아직도 이것을 구현하는 중입니다. 그것을 알아낼 수 없다. 문제는 매개 변수로 함수에서 #CoDepBenTable을 참조한다는 것입니다. –