在存储过程中调用存储过程

时间:2009-02-28 23:14:36

标签: stored-procedures

我正在努力创建一个类似于:

的storedproc
Select 
   ep.EmployeeID, GetEmployeeFirstName(ep.EmployeeID), 
   GetEmployeeLastName(ep.EmployeeID), ed.EmployeeDateOfBirth, 
   ed.EmployeeAddress, ed.EmployeeAddress2, ed.City, ed.State, ed.ZipCode
From
   EmployeeProfile ep, EmployeeDetail ed
Where 
   ep.EmployeeID = ed.EmployeeID

这段代码将是一个存储过程。 我的问题是GetEmployeeFirstName是一个存储过程,必须通过EmployeeID来获取员工的姓氏。

如何在存储过程中调用storedproc。

由于

麦克

4 个答案:

答案 0 :(得分:2)

这些可能更适合作为一种功能。

GetEmployeeFirstName(ep.EmployeeID),GetEmployeeLastName(ep.EmployeeID)

更好的是,只需加入具有名称的表。

答案 1 :(得分:2)

我不明白这些存储过程的作用。即使名字不在EmployeeProfile表中,并且即使在返回字符串之前必须对字符串进行一些操作,连接也是比存储过程或函数更好的解决方案。特别是当你考虑到表现时。

如果你有GetEmployeexName sprocs,因为你在其他地方使用它们,那没关系。无论他们做什么,如果不从你的查询中调用它,我就不会认为它是代码重复。

您需要了解对于结果集中的每一行,都会调用另外两个过程或函数。这是极其昂贵的,并且即使对于几千名员工的相对较小的结果集,也会使应用程序变得无法接受。我知道我在说什么 - 我在最近的数据库调优计划中从查询中删除了很多函数调用。

答案 2 :(得分:1)

您可以使用EXECsp_executesql从其他存储过程执行存储过程。 (顺便说一句,你还没有指定你的RDBMS)。

您的表EmployeeDetail不包含员工的名字和姓氏吗?

Select    
    ep.EmployeeID, ed.FirstName 
    ed.LastName, ed.EmployeeDateOfBirth,
    ed.EmployeeAddress, ed.EmployeeAddress2, 
    ed.City, ed.State, ed.ZipCode
From   
    EmployeeProfile ep
    inner join EmployeeDetail ed ON ep.EmployeeID = ed.EmployeeID

答案 3 :(得分:1)

在SQL Server中,为了在Select语句列表中调用GetEmployeeLastName,我将其转换为数据库函数。