【问题标题】:How to do function call in SQL Server如何在 SQL Server 中进行函数调用
【发布时间】:2021-06-29 00:50:12
【问题描述】:

我有一个这样定义的存储函数:

CREATE FUNCTION dbo.fn_IPO_Get_Elenco_Ipoteche 
    (@PAR_cod_utente INT,
     @PAR_cod_utente_sessione INT,
     @PAR_cod_profilo INT,              /*TODO: Da gestire in base all'esigenza del chiamante*/
     @PAR_data_scadenza_da DATETIME, --@VAR_Giorni_Check_From
     @PAR_data_scadenza_a DATETIME, --@VAR_Giorni_Check
     @PAR_considera_archiviate BIT)
RETURNS 
    @tb_return TABLE (num_prat int, num_ipotec int, tipoipotec tinyint, tassa_iscrizione money, datastipul smalldatetime, data_scadenza smalldatetime, data_rinnovo_ipoteca datetime, data_cancellazione date, data_autentica date, capitale money) /*manca CODICE_GARANZIA*/
AS
BEGIN

如果我不知道参数的值,我该如何拨打电话?我无法拨打电话

SELECT * 
FROM dbo.fn_IPO_Get_Elenco_Ipoteche(1234,1,1,'04/02/2021','04/30/2021',0)

因为我必须从包含这些属性的表中获取值

【问题讨论】:

  • SQL 中的函数没有标准,每个数据库执行它们的方式不同,尽管它们当然具有非常相似的功能。您需要指定这是哪个数据库(Oracle、MS SQL Server、PostgreSQL、MySql,...)。最好的方法是标记有问题的数据库。
  • 这能回答你的问题吗? Joining a table value function to a MSSQL query
  • 顺便说一句,如果可能的话,您应该考虑使用内联 TVF,它们通常比使用多语句 TVF 快得多

标签: sql sql-server database function parameters


【解决方案1】:

使用APPLY 加入关键字:

select *
  from table1 t
 cross apply dbo.functions(t.id) f

这将评估table1 的每一行的函数。

正如documentation 所说:

left_table_source { 交叉 |外部 } 应用 right_table_source

指定APPLY 运算符的right_table_source 针对left_table_source 的每一行进行评估。当 right_table_source 包含一个将 left_table_source 中的列值作为其参数之一的表值函数时,此功能很有用。

必须使用APPLY 指定CROSSOUTER。当指定CROSS 时,当 right_table_source 针对 left_table_source 的指定行进行评估并返回空结果集时不会生成任何行。

当指定OUTER 时,left_table_source 的每一行都会生成一行,即使 right_table_source 针对该行进行评估并返回空结果集也是如此。

另请参阅:Using APPLY
另请参阅:Example K. Using APPLY
另见:Example L. Using CROSS APPLY

【讨论】:

    猜你喜欢
    • 2014-07-17
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2017-03-14
    • 2022-01-27
    相关资源
    最近更新 更多