将标量函数应用于每一行

Posted

技术标签:

【中文标题】将标量函数应用于每一行【英文标题】: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 并获取:无效的对象名称。我在网上发现我应该将标量函数转换为表值函数才能使其工作,但我实际上如何转换呢? 【参考方案1】:

comparestrings 是返回表格的 UDF 吗?

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

select comparestrings(@string1, tablestring) from yourtable

【讨论】:

请注意我对我的问题 (***.com/questions/1230787/udf-performance-in-mysql) 的回复,这表明 UDF 可能会对性能产生影响。不确定这是否仍然是 SQL-2008 引擎的问题?【参考方案2】:

不要逐行调用。

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

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

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

【讨论】:

不,不幸的是,这些是动态的,来自不同的表和数据库

以上是关于将标量函数应用于每一行的主要内容,如果未能解决你的问题,请参考以下文章

当我在 R 中使用聚合时,我可以将总和应用于每一行吗?

如何将函数应用于每组数据框

是否有将函数应用于每对列的 R 函数?

熊猫有效地将groupby函数应用于每一列[重复]

Flink Table API & SQL 自定义 Scalar 标量函数

迭代 Numpy 矩阵行以分别应用一个函数?