Фабрика данных Azure: для каждого элемента () не существует значения для определенного атрибута.

У меня есть для каждого действия, у которого есть хранимая процедура (SP), в которой я, очевидно, ввожу значения с помощью item ().

Теперь предположим, что входными значениями SP являются item (). A, item (). B и item (). C

Вопрос: Для некоторых итераций foreach item (). B не существует, что ожидается. Итак, как мне поступить с этим в хранимой процедуре? Потому что в этот момент он выдает ошибку при выполнении SP, говоря:

«Выражение языка шаблонов 'item (). B' не может быть оценено, потому что свойство 'b' не существует, доступные свойства: 'a, c'

или как мне преодолеть этот сбой в фабрике данных?

Очевидно, у фабрики данных есть проверка на empty (), но нет проверки на exist ().


person Gagan    schedule 07.07.2018    source источник
comment
В вашем foreach, для тех, кто не существует, не могли бы вы дать ему нуль? И в ваших хранимых процедурах обработайте это нулевое значение. Другое дело, может, вы могли бы попробовать «?». То есть, элемент () ?. b   -  person Fang Liu    schedule 08.07.2018
comment
Я могу обрабатывать Null в SP, но проблема в том, что веб-активность или ответ REST - это ввод foreach, поэтому я уверен, что не могу его редактировать. Однако не могли бы вы объяснить, что делает? делать после элемента ()?   -  person Gagan    schedule 09.07.2018
comment
Это документ для вопросительного знака. docs.microsoft.com/ en-us / azure / logic-apps /   -  person Fang Liu    schedule 09.07.2018
comment
И это связанная ветка о вопросительном знаке. social.msdn.microsoft.com/Forums/azure/en-US/   -  person Fang Liu    schedule 09.07.2018
comment
Мне жаль, что это сработало. Я по ошибке забыл добавить @ перед item (), поэтому он принял это как текст. Я собираюсь удалить свой предыдущий комментарий, чтобы не вводить людей в заблуждение. Спасибо @FangLiu. Не могли бы вы опубликовать это как комментарий, и я приму ответ?   -  person Gagan    schedule 09.07.2018
comment
Рад слышать, что это работает. Спасибо ~   -  person Fang Liu    schedule 09.07.2018


Ответы (2)


Вы можете использовать «?». То есть, элемент () ?. b

Ссылка на знак вопроса и связанный опубликовать.

person Fang Liu    schedule 09.07.2018
comment
Работал. Спасибо. - person Gagan; 09.07.2018

Я не думаю, что вы можете решить эту проблему в фабрике данных. Вы можете использовать String (Item ()), чтобы преобразовать его в строку Json в формате:

{
    'a':'value',
    'b':'value',
    'c':'value'
}

Затем вы можете обработать это в своей хранимой процедуре с помощью некоторого творческого SQL:

DECLARE @jsonParams NVARCHAR(255) = '
    {
        "a":"a value",
        "c":"b value"
    }' 


DECLARE @paramA VARCHAR(10) = (SELECT JSON_VALUE(@jsonParams,'$.a'))
DECLARE @paramB VARCHAR(10) = (SELECT JSON_VALUE(@jsonParams,'$.b'))
DECLARE @paramC VARCHAR(10) = (SELECT JSON_VALUE(@jsonParams,'$.c'))
person Simon Zeinstra    schedule 08.07.2018
comment
Так что же происходит с тегом «b», которого не было во входных данных? Я знаю, что item () - это dict, и я могу преобразовать его в json, но ваш пример просто преобразует dict в json и вводит его в SP. Я не знаю, как это решить мою проблему. - person Gagan; 09.07.2018
comment
Ответ Фан Лю лучше. Моя идея заключалась в том, чтобы передать весь объект json в хранимую процедуру и обработать отсутствие 'b' там. Мой пример кода даст значение null и не выдаст ошибку. - person Simon Zeinstra; 09.07.2018