如何使用相关子查询更新记录?

我有一个接受一个参数并返回表/结果集的函数。我想在表中将字段设置为该记录集的第一个结果,并将表的其他字段之一作为参数传入。如果单词太复杂,查询看起来像这样:
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 '('.
    
已邀请:
我从来没有做过这样的事情......所以我看到的所有代码都在函数名称上使用了一个模式 - 所以类似于: 来自dbo.fn_doSomething(myOtherField)     
看起来像SQL 2000中的编译器错误 尝试在Server 2005中使用CROSS APPLY或OUTER APPLY加入表值函数 也试试这个,大师回答
CREATE FUNCTION FCN_pruebaChicaBorrame(@numerito int)
RETURNS @returnTable TABLE (numerito int)
AS
BEGIN
    insert into @returnTable values(@numerito)
    return
END

Select * from FCN_pruebaChicaBorrame(20)

Select col_1
    from (  select 1 as col_1
        union   select 2
        union   select 3) as tablita

Select col_1, (select * from dbo.FCN_pruebaChicaBorrame(20) as fcnTable)
    from (  select 1 as col_1
        union   select 2
        union   select 3) as tablita

Select col_1, (select * from dbo.FCN_pruebaChicaBorrame(col_1) as fcnTable)
    from (  select 1 as col_1
        union   select 2
        union   select 3) as tablita

Select col_1, (select * from dbo.FCN_pruebaChicaBorrame(case when 1=1 then 20 else 21) as fcnTable)
    from (  select 1 as col_1
        union   select 2
        union   select 3) as tablita
    
我在谷歌上搜索了这个错误,一个人谈到搜索条件中缺少单引号。您的功能代码是这种情况吗?链接到相关的博客     
似乎(至少在SQL Server 2000中)您无法将列值传递给表值函数。我不得不设置一个标量函数来解决这个问题。     

要回复问题请先登录注册