Конечно, есть другой способ, почему бы не создать скрипт, который сгенерирует для вас условие?
если 50 столбцов не находятся в конкретной таблице, просто создайте таблицу tmp со всеми столбцами, которые вам нужны (выберите ..... в #tmp из ....)
Затем сгенерируйте условие.
declare @schema sysname = 'Purchasing'
declare @table sysname = 'PurchaseOrders'
;with cols as (
select convert(varchar(max), 'ISNULL(' + QUOTENAME(column_name) + ') == TRUE') as col, TABLE_SCHEMA, TABLE_NAME, ordinal_position
from INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = @schema and TABLE_NAME = @table and ORDINAL_POSITION = 1
union all
select CONVERT (varchar(max) , cl.col + ' || ISNULL(' + QUOTENAME(column_name) + ') == TRUE') as col, c.TABLE_SCHEMA, c.TABLE_NAME, c.ordinal_position
from INFORMATION_SCHEMA.COLUMNS c
inner join cols cl on cl.TABLE_SCHEMA = c.TABLE_SCHEMA and cl.TABLE_NAME = c.TABLE_NAME and c.ORDINAL_POSITION = cl.ORDINAL_POSITION + 1
)
select '= ' + cols.col
from cols
where ORDINAL_POSITION = (select MAX(ordinal_position) from cols)
с использованием баз данных WideWorldImporters, это приведет к условию, удалите то, что не требуется.
= ISNULL([PurchaseOrderID]) == TRUE || ISNULL([SupplierID]) == TRUE || ISNULL([OrderDate]) == TRUE || ISNULL([DeliveryMethodID]) == TRUE || ISNULL([ContactPersonID]) == TRUE || ISNULL([ExpectedDeliveryDate]) == TRUE || ISNULL([SupplierReference]) == TRUE || ISNULL([IsOrderFinalized]) == TRUE || ISNULL([Comments]) == TRUE || ISNULL([InternalComments]) == TRUE || ISNULL([LastEditedBy]) == TRUE || ISNULL([LastEditedWhen]) == TRUE
Но будьте осторожны, независимо от того, какой метод вы выберете (мой или создание условия с помощью Excel), тестирование 50 столбцов в SSIS может привести к огромному переполнению, особенно если у вас много строк.
Лучшей альтернативой было бы поставить флажок в каждой строке в наборе данных и отфильтровать / перенаправить, установлен ли «HasNullValues» или нет.