sar*_*sha 3 sql stored-procedures
我正在编写一个包含3个参数的存储过程,并且我的where子句根据这些参数之一而改变.是否有可能以这种方式编写SQL查询 -
CREATE PROCEDURE [dbo].[VendorVettingModal] @column NVarchar (50), @applicanttype NVarchar (10), @donotuse int AS
declare @column NVarchar (50), @applicanttype NVarchar (10), @donotuse int
select a.Id, a.Firstname, rs.Status,cs.ClearanceStatus
from applicant a
left join ReviewStatus rs on a.ReviewStatus = rs.Id
left join ClearanceStatus cs on a.ClearanceStatus = cs.Id
where
if(@column = 'Recruiting')
begin
a.applicanttype = @applicanttype and a.reviewstatus = 7 and a.donotuse = @donotuse
end
else if(@column = 'Clearance')
begin
a.applicanttype = @applicanttype and (a.reviewstatus != 7 or a.reviewstatus is null) and a.donotuse = @donotuse
end
Run Code Online (Sandbox Code Playgroud)
而不是这样写?因为我有大约20-25列和更多的连接和params比这里定义的更多.我刚刚试图让它变得不那么复杂.
CREATE PROCEDURE [dbo].[VendorVettingModal] @column NVarchar (50), @applicanttype NVarchar (10), @donotuse int AS
declare @column NVarchar (50), @applicanttype NVarchar (10), @donotuse int
if(@column = 'Recruiting')
begin
select a.Id, a.Firstname, rs.Status,cs.ClearanceStatus
from applicant a
left join ReviewStatus rs on a.ReviewStatus = rs.Id
left join ClearanceStatus cs on a.ClearanceStatus = cs.Id
where
a.applicanttype = @applicanttype and a.reviewstatus = 7 and a.donotuse = @donotuse
end
else if(@column = 'Clearance')
begin
select a.Id, a.Firstname, rs.Status,cs.ClearanceStatus
from applicant a
left join ReviewStatus rs on a.ReviewStatus = rs.Id
left join ClearanceStatus cs on a.ClearanceStatus = cs.Id
where
a.applicanttype = @applicanttype and (a.reviewstatus != 7 or a.reviewstatus is null) and a.donotuse = @donotuse
end
Run Code Online (Sandbox Code Playgroud)
使用括号:
select a.Id, a.Firstname, rs.Status,cs.ClearanceStatus
from applicant a
left join ReviewStatus rs on a.ReviewStatus = rs.Id
left join ClearanceStatus cs on a.ClearanceStatus = cs.Id
where a.applicanttype = @applicanttype
and a.donotuse = @donotuse
AND ((@column = 'Recruiting' AND (a.reviewstatus = 7))
OR
(@column = 'Clearance' AND (a.reviewstatus != 7 or a.reviewstatus is null)))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10874 次 |
最近记录: |