如何关联单表与两个表值函数结果并插入目标表?
问题解决:调用多表值函数插入数据的语法错误
问题原因
你尝试用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
相关产品推荐
相关产品推荐

