2009-02-28 114 views
1

我attemting创建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。

感谢

迈克

回答

2

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

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

更重要的是,刚刚加入有名字的表格。

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 
+0

好的一点,实际的SQL会根据它是哪个数据库而有所不同... – uzbones 2009-02-28 23:27:14

1

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

2

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

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

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