-1

前兆:我必须使用存储过程,并且我使用的是 SQL Server 2000。我还需要吐出一个表,以便 Reporting Services 可以正确使用它。但是,我可以创建任何数据库对象来帮助获取数据。

所以,这是我的选择语句的一个例子(我希望我让它看起来和我实际使用的一样)

SELECT     
    Store.Store_ID, 
    Store.Store_Description, 
    Salaries.Income, 
    Salaries.Tax_Rate, 
    Managers.Manager_Name, 
    Employees.Employee_ID

FROM         
    Store INNER JOIN
    Managers ON Managers.Store_ID = Store.Store_ID INNER JOIN
    Employees ON Managers.Manager_ID = Employees.Manager_ID INNER JOIN
    Salaries ON Employees.Salary_Type_ID = Salaries.Salary_Type_ID 
WHERE (Store.Store_ID = 20561) 
ORDER BY Employee_ID

编辑:由于该过程返回一个值,我想要做的就是:

SELECT     
    Store.Store_ID, 
    Store.Store_Description, 
    Salaries.Income, 
    Salaries.Tax_Rate, 
    Managers.Manager_Name, 
    Employees.Employee_ID,
    Exec proc_Get_Emplyee_estimation_Costs Employee_ID    
FROM         
    Store INNER JOIN
    Managers ON Managers.Store_ID = Store.Store_ID INNER JOIN
    Employees ON Managers.Manager_ID = Employees.Manager_ID INNER JOIN
    Salaries ON Employees.Salary_Type_ID = Salaries.Salary_Type_ID 
WHERE (Store.Store_ID = 20561) 
ORDER BY Employee_ID

我知道我显然不能这样做,但我需要能够使用员工编号在每一行上使用该程序。我不知道该怎么做。

我是否可以创建一个函数,以便在过程中使用 select 语句的结果,然后将其附加到表中并将表返回给 Reporting Services?

4

2 回答 2

1

我建议使用用户定义函数而不是存储过程。您可以在 select 语句中使用 UDF 来计算并返回所需的值,如下所示:

SELECT     
    Store.Store_ID, 
    Store.Store_Description, 
    Salaries.Income, 
    Salaries.Tax_Rate, 
    Managers.Manager_Name, 
    Employees.Employee_ID,
    udf_Get_Emplyee_estimation_Costs(Employee_ID) AS EstimationCost
FROM         
    Store INNER JOIN
    Managers ON Managers.Store_ID = Store.Store_ID INNER JOIN
    Employees ON Managers.Manager_ID = Employees.Manager_ID INNER JOIN
    Salaries ON Employees.Salary_Type_ID = Salaries.Salary_Type_ID 
WHERE (Store.Store_ID = 20561) 
ORDER BY Employee_ID

用户定义函数:

CREATE FUNCTION udf_Get_Emplyee_estimation_Costs
(
    Employee_ID INT
)
RETURNS DOUBLE 
AS
RETURN 
(
    SELECT EstimationVal FROM SomeTable
)
于 2012-05-25T16:42:45.087 回答
0

为什么不使用函数返回值可以在select语句中使用返回值

试试 http://msdn.microsoft.com/en-us/library/aa258261(v=sql.80).aspx

于 2012-05-25T16:42:10.967 回答