【问题标题】:Apply scalar function to each row将标量函数应用于每一行
【发布时间】:2011-08-01 23:45:22
【问题描述】:

我有一个像这样工作的函数:select score from comparestrings(@String1,@string2)
我需要将表中的每一行(@string2)与@string1 进行比较。没有While循环和游标是否可能? 我的函数来自simmetrics library

函数代码如下:

ALTER FUNCTION 
[dbo].[BlockDistance](@firstword [nvarchar](255), @secondword [nvarchar](255))
RETURNS [float] WITH EXECUTE AS CALLER
AS 
EXTERNAL NAME [TextFunctions].[StringMetrics].[BlockDistance]

【问题讨论】:

  • 你可以使用 CROSS APPLY 和表值函数
  • 你能举个小例子吗?我正在执行以下操作:SELECT b.score FROM MyTable a CROSS APPLY BlockDistance ('sample text', a.SampleText) b 并获取:无效的对象名称。我在网上发现我应该将标量函数转换为表值函数才能使其工作,但我实际上如何转换呢?

标签: sql sql-server-2008-r2


【解决方案1】:

comparestrings 是返回表格的 UDF 吗?

相反,只需让它返回 scalar value 并执行以下操作:

select comparestrings(@string1, tablestring) from yourtable

【讨论】:

【解决方案2】:

不要逐行调用。

存储它如果输入是常量或来自同一行的列,则使用computed column逐行存储。

ALTER TABLE Mytable ADD
    Score AS comparestrings(Col1,Col2)

然后你可以持久化它并索引它

【讨论】:

  • 不,不幸的是,这些是动态的,来自不同的表和数据库
猜你喜欢
  • 2013-03-18
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2014-03-16
相关资源
最近更新 更多