带参数存储过程的条件查询
Conditional query with a parameter stored procedure
我正在学习 SQL 所以我还不知道这门语言的所有精妙之处,
我写了如下存储过程(这里简化):
ALTER PROCEDURE [dbo].[SelectAllIssues]
@Status nvarchar(1) = 0
AS
BEGIN
SET NOCOUNT ON;
IF @Status = 1 OR @Status = 2
BEGIN
SELECT IssueStatuses.Id AS 'StatusId'
FROM Issues
INNER JOIN IssueStatuses ON Issues.IssueStatusId = IssueStatuses.Id
WHERE Issues.IssueStatusId = @Status
ORDER BY Created
END
ELSE
BEGIN
SELECT IssueStatuses.Id AS 'StatusId'
FROM Issues
INNER JOIN IssueStatuses ON Issues.IssueStatusId = IssueStatuses.Id
ORDER BY Created
END
END
但这看起来不像是一种自然的方式,而且有很多重复的代码。
我想避免类似
的事情
EXEC sp_executesql @sqlStrComplet
但如果这是唯一的方法。
我不知道正确的标签,但是 sqllocaldb info MSSQLLocalDB
return
版本:13.1.4001.0
我使用 SQL Server Management Studio (SSMS)
刚刚:
select s.Id as StatusId
from issues i
inner join IssueStatuses s on i.IssueStatusId = s.Id
where (i.IssueStatusId = @Status and @status in (1, 2)) or @status not in (1, 2)
Order By created
where
子句可以简化为:
where i.IssueStatusId = @Status or @status not in (1, 2)
我正在学习 SQL 所以我还不知道这门语言的所有精妙之处,
我写了如下存储过程(这里简化):
ALTER PROCEDURE [dbo].[SelectAllIssues]
@Status nvarchar(1) = 0
AS
BEGIN
SET NOCOUNT ON;
IF @Status = 1 OR @Status = 2
BEGIN
SELECT IssueStatuses.Id AS 'StatusId'
FROM Issues
INNER JOIN IssueStatuses ON Issues.IssueStatusId = IssueStatuses.Id
WHERE Issues.IssueStatusId = @Status
ORDER BY Created
END
ELSE
BEGIN
SELECT IssueStatuses.Id AS 'StatusId'
FROM Issues
INNER JOIN IssueStatuses ON Issues.IssueStatusId = IssueStatuses.Id
ORDER BY Created
END
END
但这看起来不像是一种自然的方式,而且有很多重复的代码。
我想避免类似
的事情EXEC sp_executesql @sqlStrComplet
但如果这是唯一的方法。
我不知道正确的标签,但是 sqllocaldb info MSSQLLocalDB
return
版本:13.1.4001.0
我使用 SQL Server Management Studio (SSMS)
刚刚:
select s.Id as StatusId
from issues i
inner join IssueStatuses s on i.IssueStatusId = s.Id
where (i.IssueStatusId = @Status and @status in (1, 2)) or @status not in (1, 2)
Order By created
where
子句可以简化为:
where i.IssueStatusId = @Status or @status not in (1, 2)