sql-server - 将参数传递给可以更改查询主体的存储过程
问题描述
我想@empActiveStatus
在执行之前传递可以更改查询主体的参数。
请注意, 的值@empActiveStatus
将根据用户从应用程序中选择的内容而变化,因此empActiveStatus
可能是empActive = 1
orempActive = 0
或(empActive = 1 or empActive = 0)
。
我要防止的是创建 3 个存储过程,而是创建一个并使用参数来更改查询的主体及其返回的内容。
提前致谢。
情景 1。
CREATE PROCEDURE [dbo].[spcGetEmployees]
@empID Int,
@empActiveStatus varchar(50)
AS
SELECT empLastName, empFirstName
FROM vwEmployees
WHERE empID = @empID AND empActive = 1
GO
场景二:
CREATE PROCEDURE [dbo].[spcGetEmployees]
@empID Int,
@scenarioActiveStatus varchar(50)
AS
SELECT empLastName, empFirstName
FROM vwEmployees
WHERE empID = @empID AND empActive = 0
GO
场景 3:
CREATE PROCEDURE [dbo].[spcGetEmployees]
@empID Int,
@scenarioActiveStatus varchar(50)
AS
SELECT empLastName, empFirstName
FROM vwEmployees
WHERE empID = @empID AND (empActive = 1 OR empActive = 0)
GO
场景 4:首选程序:
CREATE PROCEDURE [dbo].[spcGetEmployees]
@empID Int,
@scenarioActiveStatus varchar(50)
AS
SELECT empLastName, empFirstName
FROM vwEmployees
WHERE empID = @empID AND @scenarioActiveStatus
GO
解决方案
我不完全确定我理解你在问什么,但我认为你在问如何编写一个存储过程来接受员工活动状态的文本值。让我们假设参数@empActiveStatus
可以具有值“活动”(这是empActive
= 1)、“非活动”(这是empActive
= 0)或“全部”(这是 的任何值empActive
)。所以存储过程看起来像:
CREATE PROCEDURE [dbo].[spcGetEmployees]
@empID Int,
@empActiveStatus varchar(50)
AS
BEGIN
SELECT empLastName, empFirstName
FROM vwEmployees
WHERE empID = @empID
AND
CASE
WHEN @empActiveStatus = 'All' THEN 1
ELSE empActive END =
CASE
WHEN @empActiveStatus = 'All' THEN 1
ELSE
CASE WHEN @empActiveStatus = 'Active' THEN 1
WHEN @empActiveStatus = 'Inactive' THEN 0
ELSE -1
END
END
END;
GO
如果 的值为@empActiveStatus
“全部”,我们建立一个条件 1 = 1 以返回所有记录,而不管该empActive
值是多少;否则,我们使用在empActive
列中找到的值并将值转换为@empActiveStatus
列的适当值。
推荐阅读
- python - 当特定数量不在特定列中时,如何删除数据框的行?
- java - 为什么 DAY_OF_WEEK 增加了额外的一天?
- c++ - asio 文档中的多线程异步 HTTP 服务器无法按预期工作
- arrays - 如何初始化核心数据对象
- python - 尝试在 Kaggle 中加载模块 pynrrd 时出现导入错误
- ios - 如何使用 SwiftUI 将图像和标签添加到标签栏项目
- sql - 如何删除产品
- java - java.io.FileNotFoundException:/raw/storage/1693-44A7/DCIM/Camera/IMG_20190525_080405.jpg(没有这样的文件或目录)
- azure-devops - 使用 GitHub 检查 Azure Pipelines 中的注释
- jquery - jQuery 不会找到动态创建的父元素来绑定子元素