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

Stored procedures 在存储过程中调用存储过程,stored-procedures,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

我试图创建一个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

谢谢

Mike

您可以使用或
sp_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
您可以使用或
sp_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

这些可能更适合作为函数

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


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

这些可能更适合作为函数

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


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

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

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

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

如果您在其他地方使用了GetEmployeexName存储过程,那么这很好。不管他们做什么,如果他们没有从你的查询中被调用,我不会认为它是代码复制。


您需要了解,对于结果集中的每一行,都会调用另外两个过程或函数。这是非常昂贵的,并且可能导致应用程序速度慢得令人无法接受,即使对于只有几千名员工的相对较小的结果集也是如此。我知道我在说什么-在最近的数据库调优活动中,我从查询中删除了很多函数调用。

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

如果您在其他地方使用了GetEmployeexName存储过程,那么这很好。不管他们做什么,如果他们没有从你的查询中被调用,我不会认为它是代码复制。

您需要了解,对于结果集中的每一行,都会调用另外两个过程或函数。这是非常昂贵的,并且可能导致应用程序速度慢得令人无法接受,即使对于只有几千名员工的相对较小的结果集也是如此。我知道我在说什么——在最近的一次数据库调优活动中,我从查询中删除了很多函数调用