2012-03-09 24 views
0

以下の生の状態のために適切なシンテックスを提案してください。
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] 


は、ここで私は、渡された入力値が「0」である場合、最大値と@number設定する必要があります。 wherer節で同じものを使いたいと思っています。

が2つのまったく同じ答えを持つことにポイントされていないと私は殴られたので、ここでは代替ソリューションです:

+0

'@ number'の使用例 – joshua

+0

' WHERE'節 - 'MAX'を計算する前後に' @ number'を使用しますか? –

+0

where table.number = ケース番号 0のときはMAX(テーブル番号) else(動作しない) – RollerCosta

答えて

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

EDITは

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 

しかしこれだけでしょう番号の列がユニークである場合は動作します。これは、あなたのケースではそうでないかもしれません。