在 SQL Server 2000 的视图中调用 returns table 的函数

Call function that returns table in a view in SQL Server 2000

  1. SQL 服务器 - 兼容级别 2000
  2. Person table - PersonId、PersonName 等(~1200 条记录)

两个用户函数 - GetPersonAddress(@PersonId)GetPaymentAddress(@PersonId)

这两个函数 return 数据在一个 table 中有 Street, City 等...(return table 中的一个记录为 PersonId)

我必须创建一个视图,通过传入人员 ID 将人员 table 与这两个用户函数连接起来。

限制:

有人可以帮忙吗?

您可以创建函数 GetPeopleAddresses()GetPaymentsAddresses(),其中 return PersonId 作为一个字段,然后您可以在 JOIN:

中使用它们
SELECT t.PersonId, PersonName, etc..., a1.Address, a2.Address
FROM YourTable t 
  LEFT JOIN GetPeopleAddresses() a1 ON a1.PersonId = t.PersonId
  LEFT JOIN GetPaymentsAddresses() a2 ON a2.PersonId = t.PersonId

当然,你的函数必须return只有唯一记录

由于您列出的限制,恐怕您无法使用 SQL Server 2000 中的视图执行此操作。评论中建议的下一个最佳选择是一个存储过程,该过程 returns 将 return 视图的行。

如果您需要在另一个查询中使用该过程的结果,您可以在临时 table 中插入由该过程编辑的值 return。不是很漂亮,你必须进行两次数据库调用(一个用于 creating/populating 临时 table,另一个用于使用它),但它有效。例如:

create table #TempResults (
  PersonID int not null,
  Name varchar(100),
  Street varchar(100),
  City varchar(100),

  <all the other fields>

  constraint primary key PK_TempResults (PersonID)
)

insert into #TempResults
exec spTheProcedureThatReplaceTheView @thePersonID
go -- end of the first DB call


select <fields>
from AnotherTable
join #TempResults on <condition>

-- don't forget to drop table when you don't need its current data anymore
drop table #TempResults