16

パラメータに基づいて、ストアド プロシージャで別の Update を実行したいと考えています。以下のコードの多くの順列を試しましたが、常にエラーが発生します。

    @EmpID int = 0, 
@NewStatus nvarchar(10) = 0
AS
BEGIN
SET NOCOUNT ON;

select CASE   @NewStatus 

when    'InOffice' then 
     Update tblEmployee set InOffice = -1 where EmpID = @EmpID
when   'OutOffice' then 
    Update tblEmployee set InOffice = -1 where EmpID = @EmpID
when 'Home' then 
    Update tblEmployee set Home = -1 where EmpID = @EmpID

END
4

3 に答える 3

36

これを試して

If @NewStatus  = 'InOffice' 
BEGIN
     Update tblEmployee set InOffice = -1 where EmpID = @EmpID
END
Else If @NewStatus  = 'OutOffice'
BEGIN
    Update tblEmployee set InOffice = -1 where EmpID = @EmpID
END
Else If @NewStatus  = 'Home'
BEGIN
    Update tblEmployee set Home = -1 where EmpID = @EmpID
END
于 2013-02-26T22:22:18.150 に答える
19

CASEIFフロー制御には使用されません...このためには、 ...を使用する必要があります

ただし、手続き型のアプローチではなく、この問題に対するセットベースの解決策があります。

UPDATE tblEmployee
SET 
  InOffice = CASE WHEN @NewStatus = 'InOffice' THEN -1 ELSE InOffice END,
  OutOffice = CASE WHEN @NewStatus = 'OutOffice' THEN -1 ELSE OutOffice END,
  Home = CASE WHEN @NewStatus = 'Home' THEN -1 ELSE Home END
WHERE EmpID = @EmpID

条件が満たされないELSE場合、意志は元の値を保持することに注意してください。@NewStatus

于 2013-02-26T22:25:08.573 に答える