我正在尝试使用函数更新表列。该函数的输入参数是我想要更新的表中的数据字段。
假设我有两列的表(“国家”和“资本”)。输入“Capital”,我使用的函数返回按名称作为输入参数的县名。所以,我的更新代码是这样的:
UPDATE @TableName
SET Country=(SELECT Country FROM dbo.fn_GetCountryByCapital(Capital))
IntelliSence没有生成错误,但在F5上按下它说:
'Capital'附近的语法不正确。
请注意,这只是一个例子(因为它看起来很傻)。我给它样本以描述我的问题。我的实际情况包括在update语句中使用了几个函数。
提前感谢您的帮助。 Joro
可能的解决方案:
我找到了其他方法来做到这一点。它看起来不太好,但它确实有效:
我的猜测是,包含select语句和函数的括号'()'不允许函数使用表中的正确值。
答案 0 :(得分:0)
学习构建SQL的正确方法(最有效):
UPDATE a
SET Country=b.Country
FROM @TableName a
INNER JOIN YourCountryCapitalTable b ON a.Capital=b.Capital
你不能像应用程序那样编写SQL代码,你需要使用set logic和NOT per row logic。当您将一堆函数抛出到SQL语句中时,他们很可能将需要每行运行,从而减慢查询速度(除非它们是FROM子句中的表函数)。如果只是将函数合并到查询中,您可以最有可能看到大量的性能改进,因为索引使用和操作发生在完整而非每行的行上。
这是可悲不得不非常SQL代码,是不是优雅,往往会重演所有的地方。但是,你的主要目标是快速数据检索(索引使用和设置操作)而不是一些奇特的编码选美比赛。
I have found other way to do this.
yuck yuck yuck,当下一个人需要维护此代码时,这听起来像是未来的问题。您不需要索引来使用WHILE
。如果临时表中有这么多行需要索引,那么WHILE
就是你应该做的最后事情!