连接1个表和2个表值函数返回表



我有一个数据库,其中有一个表,我将其称为Table1。数据库还有2个表值函数。第一个函数返回一个表,我将其称为Table2,第二个函数返回一个表,我将其称为Tabel3。还有第四个表,我将其命名为Table4,我想在其中插入记录。

表1有以下字段:

Fileno
Description
GeneralCode

第一个函数接受2个参数(表1)。Fileno, Table1.Description)并返回Table2,其中包含以下字段:

FileNum
Desc1
Desc2
Desc3

第二个函数有两个参数(表1)。Fileno, Table1.GeneralCode)并返回Table3,其中包含以下字段:

FileNum
Code1
Code2

第四个表Table4有以下字段:

CaseNum
Desc1
Desc2
Desc3
Code1
Code2    

我写了下面的查询,它可以工作:

DELETE FROM Table4
INSERT INTO Table4(CaseNum, Desc1, Desc2, Desc3)
SELECT Fileno, Desc1, Desc2, Desc3
FROM Table1 
CROSS APPLY function1(FileNo, Description)

这个查询运行,调用函数(返回一个表),并将数据插入到Table4中。

现在,我需要修改查询以调用第二个函数,该函数将返回另一个表,并将该数据插入Table4。我有以下代码:

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
INNER JOIN function1(m.Fileno, m.Description) d ON d.FileNum = m.Fileno
LEFT OUTER JOIN function2(m.Fileno, m.GeneralCode) c ON c.FileNum = m.Fileno;

但是这段代码不起作用。智能感知突出显示了我传递给函数的字段,所以显然我不能以这种方式引用这些字段,但我不确定如何解决这个问题。

非常感谢任何帮助。谢谢!

您的查询应该像下面这样:

您可以应用多个表表达式或tvf,您在示例查询中显示了一个外部连接,因此使用外部应用,您可能(大概)没有得到返回的行,然后处理null,如果需要的话。

select m.Fileno, 
f1.Desc1, f1.Desc2, f1.Desc3, 
IsNull(f2.Code1,''), IsNull(f2.Code2,'')
from Table1 m
cross apply function1(m.FileNo, m.Description)f1
outer apply function2(m.FileNo, m.GeneralCode)f2;

相关内容

  • 没有找到相关文章

最新更新