同じコードを持つSQLクエリはありますが、2つの異なるテーブル(AUDIT_TRAIL_ARCHIVEとAUDIT_TRAIL)があります。私は "UNION ALL"を使って1つの結果を得ます。自分自身を繰り返してはいけません:同じSQLクエリではあるが2つの異なるテーブル
良いプログラマーは"Don't repeat yourself"原則を使用します。良いプログラマーはWETを避ける(すべてを2回書く)。
このコードを「自分自身を繰り返さないでください」という原則に書き換えますか?例えば
SELECT REPLACE (ENTITY_KEY, 'rss_user_name=CN=', '')
FROM AUDIT_TRAIL_ARCHIVE AU
INNER JOIN
(SELECT RSS_USER_NAME
FROM RSS_USER
WHERE RSS_NAME = 'rmad'
AND ADD_INFO_MASTER LIKE '%__47__UPN=%@richemont.com%') FALSCH
ON REPLACE (AU.ENTITY_KEY, 'rss_user_name=CN=', '') =
FALSCH.RSS_USER_NAME
WHERE AU.RSS_NAME = 'rmad'
AND AU.TABLE_NAME = 'rss_user'
AND AU.ACTION = 'Insert'
AND AU.ENTITY_KEY LIKE 'rss_user_name=CN=%'
AND AU.ORIGIN != 'RSS'
UNION ALL
SELECT REPLACE (ENTITY_KEY, 'rss_user_name=CN=', '')
FROM AUDIT_TRAIL AU
INNER JOIN
(SELECT RSS_USER_NAME
FROM RSS_USER
WHERE RSS_NAME = 'rmad'
AND ADD_INFO_MASTER LIKE '%__47__UPN=%@richemont.com%') FALSCH
ON REPLACE (AU.ENTITY_KEY, 'rss_user_name=CN=', '') =
FALSCH.RSS_USER_NAME
WHERE AU.RSS_NAME = 'rmad'
AND AU.TABLE_NAME = 'rss_user'
AND AU.ACTION = 'Insert'
AND AU.ENTITY_KEY LIKE 'rss_user_name=CN=%'
AND AU.ORIGIN != 'RSS'
ここでの目標は、動的SQLを使用することです。同じSQLだがdiff。テーブルを作成したり、Florinの例のようにクエリを書き直したりできますか? – Art
@ fyodor78最初の解決策は必ずしも最良ではありません。もちろん、選択前のテーブルに参加することはできますが、各テーブルから1行を取得する場合は、なぜ100,000行のテンポラリテーブルを作成しますか?動的SQLを参照して、プロシージャを作成し、クエリ文字列を構築し、そのプロシージャを再利用してください。 – dognose