sql - 如何在 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)
因为我必须从包含这些属性的表中获取值
解决方案
使用APPLY
join 关键字:
select *
from table1 t
cross apply dbo.functions(t.id) f
这将评估每一行的函数table1
。
正如文档所说:
left_table_source { 交叉 | 外部} 应用right_table_source
指定针对left_table_source的
APPLY
每一行评估运算符的right_table_source。当right_table_source包含将left_table_source中的列值作为其参数之一的表值函数时,此功能很有用。要么 要么
CROSS
必须OUTER
用 指定APPLY
。CROSS
指定时,当 right_table_source 针对 left_table_source 的指定行进行评估并返回空结果集时,不会生成任何行。指定时,即使right_table_source针对该行计算并返回空结果集,也会为left_table_source
OUTER
的每一行生成一行。
另请参阅:使用 APPLY
另请参阅:示例 K. 使用 APPLY
另请参阅:示例 L. 使用 CROSS APPLY
推荐阅读
- spring-boot - spring boot 不接 custmize trustManager
- mysql - (Amazon Linux) MySQL 在 EC2 重启时停止工作
- php - NGINX 总是强制下载 PHP 页面
- java - JOOQ 更新集不填充值
- sql - 使用限制性 where 子句(非常小的行子集)的内部连接的性能非常慢
- dojo - DoJo 增强的网格动态更新约束不起作用
- r - 无效的下标类型“列表”Azure 机器学习
- ios - '尝试将第 0 行插入第 0 节,但更新后第 0 节中只有 0 行' 向表中插入行时
- android - 使用 viewpager 进行圆形过渡的片段
- xml - XSLT 无法将 DITA 转换为新类型