Mam zapytanie SQL z dokładnie tym samym kodem, ale dwiema różnymi tabelami (AUDIT_TRAIL_ARCHIVE i AUDIT_TRAIL). Używam "UNION ALL", aby uzyskać jeden wynik.Nie powtarzaj się: to samo zapytanie SQL, ale dwie różne tabele
Zasada dobrego programisty polega na użyciu zasady "Don't repeat yourself". Dobrzy programiści unikają WET (zapisuj wszystko dwa razy).
Howto przepisać ten kod za pomocą zasady "Nie powtarzaj się"?
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'
Jaki jest Twój cel: użyć dynamicznego sql, np. ten sam sql ale diff. tabele lub przepisać zapytanie tak jak w przykładzie Florina? – Art
@ fyodor78 Pierwsze rozwiązanie nie zawsze jest najlepsze. Oczywiście możesz dołączyć do tabel PRZED WYBOREM - ale dlaczego chcesz utworzyć tabelę tymczasową o wartości 100 000 wierszy, jeśli chcesz pobrać jeden wiersz z każdego z nich? Zobacz w dynamicznym SQL, utwórz procedurę, zbuduj ciąg zapytania i ponownie użyj tej procedury. – dognose