我有一个数据库,其中有一个表,我将其称为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;