web-dev-qa-db-ja.com

T-SQL UPDATEステートメント内でのIF条件の実装

T-SQLを使用して、対応する変数が定義されている場合にのみ列を設定するUPDATEステートメントを実行したいと思います。

これが私が達成しようとしていることの簡単な疑似tsqlの例です:


--Declaring vars
@ID int,
@Name nvarchar(20),
@Password nvarchar(10)

--Run the update
UPDATE User
SET
IF LEN(@NAME) > 0
  Name = @Name,
IF LEN(@Password) > 0
  Password = @Password

T-SQLでIF条件がどのように機能するかを読むことでわかることから、上記の擬似コードと同じ結果を達成するには、すべてのIF条件に対してUPDATEステートメントを作成する必要があります-これは私がしようとしていることですする必要はありません。

UPDATEステートメントを1つだけ使用して、条件に基づいてフィールド/列を動的に設定することは可能ですか? -もしそうなら、どのように?

19
Jed

CASE式

UPDATE User
SET
    Name = CASE WHEN LEN(@NAME) > 0 THEN @Name ELSE Name END,
    Password = CASE WHEN LEN(@Password) > 0 THEN @Password ELSE Password END
WHERE
   ...
45
gbn

これは便利だと思います:

Create PROCEDURE [dbo].[CodeUpdate] 
(
    @Id int, 
    @Name nVarChar(150)=null, 
    @IsActive bit =null, 
    @IsSystem bit=null
) AS 
BEGIN 
    UPDATE [dbo].[Code] SET 
        [Name] = CASE WHEN @Name is null THEN [Name] ELSE @Name END,
        [IsActive] = CASE WHEN @IsActive is null THEN [IsActive] ELSE @IsActive END,
        [IsSystem] = CASE WHEN @IsSystem is null THEN [IsSystem] ELSE @IsSystem END
    WHERE  ID = @Id
End

あなたはそれが好きですか?楽しい。

2
Ahmad Ebrahimi