У меня сложное требование. Я безуспешно пытался sh удалить из базы данных.
Моя среда основана на Azure фабрике данных + SQL сервере.
По сути, у меня есть исходная таблица и целевая таблица, и перед вставкой из источника в целевую я должен:
Проверить каждую из ячеек. Проверка на самом деле сложна и основана на наборе динамических c функций, которые читают лог c проверки на основе типа данных столбца, длины, таблицы и так далее, а также того, какие столбцы нуждаются в проверке и сколько из них им нужно.
Для данного столбца может потребоваться более одной проверки (есть другая таблица, в которой указывается, какие проверки применять к каждому столбцу).
Если проверка не прошла для данной ячейки, мне нужно записать это в таблицу аудита и установить значение null или пустое, чтобы разрешить вставку в мою целевую таблицу.
В целях иллюстрации скажем, что я просто хочу проверить, является ли столбец A целочисленным в рамках проверки 1, если его меньше 150 в рамках проверки 2, и столбец C не содержит символ «A» в качестве проверки 1.
SourceTable
TargetTable
ErrorLog
Полагаю, вы знаете, почему я пытался убрать sh это от SQL. В основном мне нужно сделать три вложенных цикла:
- L oop в строках
- L oop в столбцах
- L oop в правилах
Как бы я ни думал об этом, я все равно не вижу чтобы сделать это с помощью операций на основе SET и даже с циклами, я также не понимаю, как это сделать. Насколько мне известно, вы не можете вложить al oop в al oop (не говоря уже о том, что это убьет производительность).
Единственный вариант, который я вижу, - это использование INSTEAD-OF-TRIGGER, который делает это для каждой записи, но мне все равно придется oop через столбцы и правила.
Есть идеи?