【发布时间】:2011-02-21 09:07:07
【问题描述】:
我有一个函数,它接受一个参数并返回一个表/结果集。我想将表中的一个字段设置为该记录集的第一个结果,并将表的其他字段之一作为参数传递。如果用词太复杂,查询看起来像这样:
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.
知道我做错了什么,以及如何做到这一点吗?
更新:
根据 Anil Soman 的回答,我意识到该函数需要一个字符串参数,并且传递的字段是一个整数。我不确定这是否应该是一个问题,因为使用整数值显式调用函数有效 - 例如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 '('.
【问题讨论】:
-
那个功能码也可以加吗?
标签: sql sql-update correlated-subquery