SQL Server:更改存储过程以接受参数

Posted

技术标签:

【中文标题】SQL Server:更改存储过程以接受参数【英文标题】:SQL Server : alter stored procedure to accept parameters 【发布时间】:2017-03-12 06:56:18 【问题描述】:

Employee

编写一个 SQL 语句来改变下面提到的预先存在的存储过程以完成以下操作:

允许提供包含经理Emp_ID 的参数 使用提供的参数来限定查询中的Emp_ID 如果未提供参数值,则为参数分配零值 将结果语句重写为包含经理姓氏的JOIN

确保结果显示如下:

Manager's Last Name
Employee's Last Name
Employees Hire Date

按经理姓氏、最近雇用的员工和员工姓氏对查询结果排序

这是预先存在的存储过程代码:

CREATE PROCEDURE dbo.sp_GetEmployeeNm 
AS
   SELECT  
       Last_Nm, Hire_Dt
   FROM 
       dbo.Employee
   WHERE 
       Mgr_ID IN (SELECT Emp_ID 
                  FROM dbo.Employee 
                  WHERE Emp_ID = 12345)

有没有人知道如何正确地改变这个存储过程?

这是我尝试过的:

ALTER PROCEDURE dbo.sp_GetEmployeeNm (@Emp_ID INT = 0) 
AS 
BEGIN
    SELECT 
        m.Last_Nm AS Manager's Last Name, 
        e.Last_Nm AS Employee's Last Name, 
        e.Hire_Dt AS Employee's Hire Date
    FROM
        Employee  e
    INNER JOIN 
        Employee m ON e.Emp_ID = m.Mgr_ID
    WHERE 
        e.Emp_ID = 12345
    ORDER BY 
        (m.Last_Nm, e.Hire_Dt, e.Last_Nm) DESC
END

【问题讨论】:

乍一看,好像需要把WHERE e.Emp_ID = 12345改成WHERE e.Emp_ID = @Emp_ID 谢谢@AndrewMorton 【参考方案1】:
ALTER PROCEDURE dbo.sp_GetEmployeeNm 
    @Emp_ID INT = 0 
AS 
BEGIN
    SELECT 
        m.Last_Nm AS 'Manager''s Last Name', 
        e.Last_Nm AS 'Employee''s Last Name', 
        e.Hire_Dt AS 'Employee''s Hire Date'
    FROM 
        Employee  e
    INNER JOIN 
        Employee m ON e.Emp_ID = m.Mgr_ID
    WHERE 
        e.Emp_ID = @Emp_ID
    ORDER BY 
        (m.Last_Nm, e.Hire_Dt, e.Last_Nm) DESC
END
GO

使用

EXEC dbo.sp_GetEmployeeNm 12345

【讨论】:

而且您需要将这些列别名放在双引号中!! m.Last_Nm AS "Manager's Last Name", ....

以上是关于SQL Server:更改存储过程以接受参数的主要内容,如果未能解决你的问题,请参考以下文章

在存储过程中接受永远无法工作的 SQL Server 查询

SQL Server 存储过程参数类型转换

为啥需要以只读方式输入 SQL Server 存储过程的表值参数?

将 Access 表日期值作为参数传递给 SQL Server 存储过程

从 SQL Server 中检索各种存储过程的数据的单一方法,如何处理参数?

sql server中怎样创建保存数据的存储过程