У меня есть функция, которая принимает один параметр и возвращает таблицу / набор результатов. Я хочу установить поле в таблице на первый результат этого набора записей, передав в качестве параметра одно из других полей таблицы. Если это слишком сложно в словах, запрос выглядит примерно так:
UPDATE myTable
SET myField = (SELECT TOP 1 myFunctionField
FROM fn_doSomething(myOtherField)
WHERE someCondition = 'something')
WHERE someOtherCondition = 'somethingElse'
В этом примере myField
и myOtherField
- это поля в myTable
, а myFunctionField
- это поле, возвращаемое fn_doSomething
. Это кажется мне логичным, но я получаю следующую странную ошибку:
'myOtherField' is not a recognized OPTIMIZER LOCK HINTS option.
Есть идеи, что я делаю неправильно, и как я могу это сделать?
UPDATE
Основываясь на ответе Анила Сомана, я понял, что функция ожидает строковый параметр и передаваемое поле является целым числом. Я не уверен, должно ли это быть проблемой, поскольку работает явный вызов функции с использованием целочисленного значения - например, fn_doSomething (12345), кажется, автоматически приводит число к строке. Однако я попытался сделать явное приведение:
UPDATE myTable
SET myField = (SELECT TOP 1 myFunctionField
FROM fn_doSomething(CAST(myOtherField AS varchar(1000)))
WHERE someCondition = 'something')
WHERE someOtherCondition = 'somethingElse'
Теперь я получаю следующую ошибку:
Line 5: Incorrect syntax near '('.