私が欲しいやり方でビジネス要件を満たすことが困難です。私は、これとは別のやり方をするための提案もしています。TSQL - ファンクションを派生テーブルとして使用する問題とエラー
基本的に、EmployeeアドレスとDependentアドレスのコンテキストにはかなりのデータ入力エラーがあります。従業員の名前は123 SW 5th St.
のようになります。扶養家族は123 S.W. 5th St
と入力できます。私は住所を動的に比較して、それらが同じかどうか、つまり従業員との扶養の有無を確認する必要があります。
クライアントと私は、スペース区切り文字でアドレスを分割し、EmployeeとDependentの最初の3つの分割を比較し、2つが一致すればアドレスが同じであると判断しました。文字列を分割するコードが正しく動作しています。
私が取ったアプローチは、このでした:表中の
- 3つの文字列に依存アドレスを分割し、それらを返すように関数を使用して、変数
- は、3つの文字列の中に従業員の住所を分割する機能を使用し、それらをテーブル変数に戻す
- これらのテーブルを派生テーブルとして使用し、多対多の結合を意図的に結合します。
- その多数から多数の結合から返されるレコードの数が> = 2の場合、アドレスは同じです。以下は
コードは次のようになります。私は取得していますエラーがThe multi-part identifier "#CoDepBenTable.DEV_EmpAddress" could not be bound.
あり、そしてThe multi-part identifier "#CoDepBenTable.ContactAddressLine1" could not be bound.
関数は、データと同じデータベースにdbo
スキーマに作成され
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
私は最初に一時テーブルにデータを入れてから、一時テーブルを更新しようとしていますが、そこから来ています。
これを回避する方法はありますか?なぜ私がここでエラーを受けているのか分かりません。
'* dbo.fn_CompareAddresses(#CoDepBenTable.DEV_EmpAddress) FROM を選択)AS SELECT * FROM #CoDepBenTable dbo.fn_CompareAddresses(DEV_EmpAddress)xを適用するx <ある条件> )AS D'あなたが選択していないテーブルから列を渡すことはできません。これはテーブル値の関数なので、[applyを使う必要があります(https://dba.stackexchange.com/questions/86143/how-to-join-a-table-with-a-table-valued-function ) – scsimon
まだこの実装に取り組んでいます。それは分かりません。この問題は、関数内の#CoDepBenTableをパラメータとして参照しているということですが、 –