You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关联单表与两个表值函数结果并插入目标表?

问题解决:调用多表值函数插入数据的语法错误

问题原因

你尝试用INNER JOIN和LEFT OUTER JOIN调用依赖外部表参数的表值函数,这不符合SQL Server的语法规则。表值函数如果需要接收来自外部表(如这里的Table1)的逐行参数,必须使用APPLY运算符(CROSS APPLY或OUTER APPLY),而非常规JOIN——JOIN逻辑是先执行函数生成完整结果集再关联,无法实现逐行传递参数的需求。

修正后的代码

DELETE FROM Table4
INSERT INTO Table4(CaseNum, Desc1, Desc2, Desc3, Code1, Code2)
SELECT 
    m.Fileno, 
    d.Desc1, d.Desc2, d.Desc3, 
    c.Code1, c.Code2
FROM Table1 m
CROSS APPLY function1(m.Fileno, m.Description) d
OUTER APPLY function2(m.Fileno, m.GeneralCode) c;

关键说明

  • CROSS APPLY:等价于内连接逻辑,仅当function1返回对应行结果时,才保留Table1的该行数据,和你原代码的逻辑一致。
  • OUTER APPLY:等价于左外连接逻辑,无论function2是否返回结果,都会保留Table1的该行数据,匹配你原代码的LEFT OUTER JOIN需求。
  • 无需额外添加ON条件:根据你的函数定义,函数返回的FileNum必然与m.Fileno匹配,若需额外过滤可添加WHERE子句。

内容的提问来源于stack exchange,提问作者Jonathan Small

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:45:39