首页 > 解决方案 > 如何在 SQL Server 中进行函数调用

问题描述

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

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)

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

标签: sqlsql-serverdatabasefunctionparameters

解决方案


使用APPLYjoin 关键字:

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

这将评估每一行的函数table1

正如文档所说:

left_table_source { 交叉 | 外部} 应用right_table_source

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

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

指定时,即使right_table_source针对该行计算并返回空结果集,也会为left_table_sourceOUTER的每一行生成一行。

另请参阅:使用 APPLY
另请参阅:示例 K. 使用 APPLY
另请参阅:示例 L. 使用 CROSS APPLY


推荐阅读