2010-07-15 10 views
17

T-SQL kullanarak, yalnızca ilgili değişkenler tanımlanmışsa SET sütunları olacak bir UPDATE deyimi yürütmek istiyorum. İşte Bir T-SQL GÜNCELLEŞTİRME deyiminde IF koşulu uygulanması

Ben başarmak ne çalışıyorum basit bir sahte-TSQL örnek: Ne söyleyebilirim Gönderen


--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 

okuyarak nasıl T-SQL koşullar eser içinde IF Yukarıdaki sözde kodla aynı sonucu elde etmek için, her bir IF koşulu için UPDATE ifadesi oluşturmam gerekirdi - ki yapmak zorunda kalmamayı denediğim şey budur.

Yalnızca bir UPDATE ifadesi kullanarak koşullara göre alanları/sütunları dinamik olarak ayarlamak mümkün mü? - Öyleyse nasıl?

cevap

42

Ben bu yararlı olacağını düşünüyorum CASE expression

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 
    ... 
2

:

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 

hoşuna mı? Keyfini çıkarın.