si lo hace una combinación que se parece a esto
Excluyendo los partidos en campos de unión que son nulas
SELECT T1.KeyField1, T1.KeyField2, T2.Field3
FROM T1 JOIN T2 ON T1.KeyField1 = T2.KeyField1 AND T1.KeyField2 = T2.KeyField2
¿Hay una manera de no permitir que NULLS para que coincida similar a los resultados de esta consulta devolvería
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
EDITAR
De hecho, hice la pregunta equivocada ... Déjame intentarlo de nuevo.
Estamos comparando datos nuevos con datos antiguos y buscando registros donde las filas son exactamente iguales.
Así ambas tablas definidas:
CREATE TABLE [Table](
[Identifier] [int] IDENTITY(1,1) NOT NULL,
[Key1] [varchar](50) NOT NULL,
[Data1] [varchar](50) NULL,
[Data2] [varchar](50) NULL
Si hago la consulta:
DELETE
FROM T1 JOIN T2 ON T1.Key1 = T2.Key1
AND T1.Data1 = T2.Data2 AND T1.Data2 = T2.Data2
Dale
T1 & T2
| Key1 | Data1 | Data2 |
| 1000 | 123 Main St | <NULL> |
| 1001 | 456 High St | FLOOR 2 |
Esto no sería eliminar el registro duplicado 1000 de T1 ya Dato2 es NULO.
Fuera de hacer uso de un valor mágico en la unión, ¿hay alguna otra manera de compararlos?
Entiendo que debería hacer que los consultores reescriban el código para insertar todos los NULLS como '', pero esta es una gran empresa en este momento. También estoy buscando hash la fila para buscar diferencias.
derecho. Deberia haber recordado eso. Ocasionalmente también tenemos que comparar NULL = NULL.Como SET ANSI_NULLS OFF eventualmente causará un error, ¿hay alguna forma de hacer la comparación sin usar ISNULL (T1.Field1, '-9999') = ISNULL (T2.Field2, '-9999') –