【问题标题】:Multiple Parameters in UDF in SQLSQL中UDF中的多个参数
【发布时间】:2022-07-26 23:33:57
【问题描述】:

我正在尝试建立一个具有多个参数的函数,如下所示@SITENAME、@MARKET 和@DATE。

ALTER FUNCTION [dbo].[Platform_Parser]
(
  @SITENAME NVARCHAR(2000) NULL
  ,@MARKET NVARCHAR(2000) NULL
  ,@DATE Date NULL
)
RETURNS NVARCHAR(2000)
AS
BEGIN
    RETURN
  CASE
WHEN @SITENAME LIKE '%GOOGLE%' AND @DATE < '2022-01-01' AND @MARKET IN ('FR','DE') THEN 'TWITTER'
    WHEN @SITENAME LIKE '%GOOGLE%' AND @DATE < '2022-01-01' AND @MARKET = 'UK' THEN 'YOUTUBE'
    ELSE 'Unclassified'
  END
END
GO

我希望我需要使用表值参数,但是我需要将函数放置在引用视图引用自身的几个不同表中,因此不完全确定如何执行此操作。

我目前如何在视图中实现的一个示例是

 [dbo].[Platform_Parser]([SiteName],[Market],[Date])

但可以想象它需要更改为下面的新参数是一个表格。

 [dbo].[Platform_Parser]([SiteName],[Market],[Date],[dbo].[ThisTable])

【问题讨论】:

  • 如果您不使用 SQL Server 2019,我建议您不要使用多行标量函数。至于表类型参数,您可以将它们用于函数,但我怀疑这是您想要的方式;您没有将 表名 传递给它,您需要在 INSERT 的行中定义适当的用户定义表 TYPE 的变量。您实际上想在这里实现什么;我怀疑你在这里问的是XY Problem
  • 谢谢@Larnu,最初我有一个工作函数,它使用“@SITENAME”的单数参数确定平台,但随后必须使用“日期”和“市场”进一步参数来确定这些平台以及 SITENAME。这是我的主要问题
  • 这并不能真正解释您想要解决的实际问题。特别是当您想将表类型参数传递给函数时,该函数甚至没有FROM,因此表类型不适合当前设计。您需要详细说明您要解决的问题。提供样本数据(以消费格式)和预期结果。

标签: sql sql-server function table-valued-parameters


【解决方案1】:

您可以在具有不同表的查询中使用您的函数,您不需要在函数中包含表名。

对于你的例子,你可以这样写:

select [dbo].[Platform_Parser]([SiteName],[Market],[Date]) 
from [dbo].[ThisTable]

只需确保 [SiteName]、[Market]、[Date] 是 [dbo].[ThisTable] 中的列;否则,将列名作为函数参数传递。

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2018-11-17
    • 2010-11-02
    相关资源
    最近更新 更多