2012-03-09 105 views
0

建議我在以下原始狀態下使用正確的syntex。
sql server-conditional where子句

ALTER PROCEDURE [dbo].[pro_name] 
@number as int , 

Select * from table 
if(@number=0) 
begin 
set @number=select max(number)from table 
end 
where [email protected] 


這裏我需要設置@number與最大值如果通過輸入值爲「0」。並且還希望在wherer子句中使用同樣的內容。

+0

'@ number'使用案例 – joshua 2012-03-09 04:53:26

+0

'WHERE'子句 - 您希望在計算MAX之前還是之後使用'@ number'? – 2012-03-09 05:05:32

+0

where table.number = case number when 0 then MAX(table.number) else number(NOT WORKING) – RollerCosta 2012-03-09 05:17:38

回答

2
ALTER PROCEDURE [dbo].[pro_name] 
@number as int=0 --I recommend a default value here too 
as 
set @number=case @number when 0 then (select max(number)from [table]) else @number end; 

Select * from [table] t 
where [email protected]; 
go 
0

編輯

由於沒有指向有兩個完全一樣的答案,我被打,這裏是一個替代的解決方案:

alter procedure [dbo].[pro_name] 
@number as int as 

select top 1 * from [table] 
where number = @number or @number = 0 
order by [table].number desc 

然而,這隻會如果數字列是唯一的,那麼可能會或可能不會如此。