se si fa un join che assomiglia a questo
esclusa partite su ISCRIVITI campi che sono nulli
SELECT T1.KeyField1, T1.KeyField2, T2.Field3
FROM T1 JOIN T2 ON T1.KeyField1 = T2.KeyField1 AND T1.KeyField2 = T2.KeyField2
C'è un modo per non permettere NULLS per abbinare simili ai risultati di questa interrogazione restituirebbe
SELECT T1.KeyField1, T1.KeyField2, T2.Field3
FROM T1 JOIN T2 ON T1.KeyField1 = T2.KeyField1 AND T1.KeyField2 = T2.KeyField2
AND T1.KeyField2 IS NOT NULL AND T2.KeyField2 IS NOT NULL
EDIT
012.351.In realtà ho fatto la domanda sbagliata .... Fammi riprovare.
Stiamo confrontando un nuovo dato con dati vecchi e cercando record in cui le righe sono esattamente le stesse.
Così entrambe le tabelle definite:
CREATE TABLE [Table](
[Identifier] [int] IDENTITY(1,1) NOT NULL,
[Key1] [varchar](50) NOT NULL,
[Data1] [varchar](50) NULL,
[Data2] [varchar](50) NULL
Se faccio la domanda:
DELETE
FROM T1 JOIN T2 ON T1.Key1 = T2.Key1
AND T1.Data1 = T2.Data2 AND T1.Data2 = T2.Data2
Dare
T1 & T2
| Key1 | Data1 | Data2 |
| 1000 | 123 Main St | <NULL> |
| 1001 | 456 High St | FLOOR 2 |
Questo non sarebbe rimuovere il record duplicato 1000 dal T1 dal Dati2 è NULLO.
Al di fuori di utilizzare un valore magico nel join, c'è un altro modo per confrontare questi?
Capisco che dovrei fare in modo che i consulenti riscrivano il codice per inserire tutti i NULLS come "", ma a questo punto è un'impresa enorme. Sto anche osservando l'hashing della fila per cercare le differenze.
destro. Avrei dovuto ricordarmelo. Occasionalmente dobbiamo anche confrontare NULL = NULL.Poiché SET ANSI_NULLS OFF alla fine causerà un errore, è possibile eseguire il confronto senza utilizzare ISNULL (T1.Field1, '-9999') = ISNULL (T2.Field2, '-9999') –