Если Вы делаете соединение, которое похоже на это
SELECT T1.KeyField1, T1.KeyField2, T2.Field3
FROM T1 JOIN T2 ON T1.KeyField1 = T2.KeyField1 AND T1.KeyField2 = T2.KeyField2
Есть ли способ не позволить, АННУЛИРУЕТ для соответствия подобный результатам, которые возвратил бы этот запрос
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
Править
Я на самом деле задал вопрос неправильно.... Позвольте мне попробовать еще раз.
Мы сравниваем новые данные со старыми данными и ищем записи, где строки являются точно тем же.
Таким образом, обе таблицы определили:
CREATE TABLE [Table](
[Identifier] [int] IDENTITY(1,1) NOT NULL,
[Key1] [varchar](50) NOT NULL,
[Data1] [varchar](50) NULL,
[Data2] [varchar](50) NULL
Если я делаю запрос:
DELETE
FROM T1 JOIN T2 ON T1.Key1 = T2.Key1
AND T1.Data1 = T2.Data2 AND T1.Data2 = T2.Data2
Дать
T1 & T2
| Key1 | Data1 | Data2 |
| 1000 | 123 Main St | <NULL> |
| 1001 | 456 High St | FLOOR 2 |
Это не удалило бы дублирующиеся рекордные 1000 из T1, так как Data2 является ПУСТЫМ.
За пределами использования волшебного значения в соединении, там какой-либо другой способ сравнить их?
Я понимаю, что должен заставить консультантов переписать код для вставки всех, АННУЛИРУЕТ как'', но это - огромное обязательство в этой точке. Я также смотрю на хеширование строки для поиска различий.