Stored procedures 在存储过程中调用存储过程
我试图创建一个storedproc,如下所示: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
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存储过程,那么这很好。不管他们做什么,如果他们没有从你的查询中被调用,我不会认为它是代码复制。 您需要了解,对于结果集中的每一行,都会调用另外两个过程或函数。这是非常昂贵的,并且可能导致应用程序速度慢得令人无法接受,即使对于只有几千名员工的相对较小的结果集也是如此。我知道我在说什么——在最近的一次数据库调优活动中,我从查询中删除了很多函数调用