2010-07-15 15 views
17

टी-एसक्यूएल का उपयोग करते हुए आईएफ शर्त लागू करना, मैं एक अद्यतन स्टेटमेंट निष्पादित करना चाहता हूं जो केवल एसईटी कॉलम ही करेगा यदि संबंधित चर परिभाषित किए गए हैं।टी-एसक्यूएल अपडेट स्टेटमेंट

यहाँ मैं क्या हासिल करने की कोशिश कर रहा हूँ का एक सरल छद्म 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 में स्थिति काम करते हैं, में उपर्युक्त छद्म कोड के समान परिणाम को पूरा करने के लिए, मुझे प्रत्येक आईएफ स्थिति के लिए एक अद्यतन विवरण बनाना होगा - जो मैं करने से बचने की कोशिश कर रहा हूं।

क्या केवल एक अपडेट स्टेटमेंट का उपयोग करके किसी शर्त के आधार पर गतिशील रूप से एसईटी फ़ील्ड/कॉलम करना संभव है? - यदि हां, तो कैसे?

उत्तर

42

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 

आप इसे पसंद है? आनंद लें।

संबंधित मुद्दे