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 存储过程的表值参数?
将 Access 表日期值作为参数传递给 SQL Server 存储过程