views:

29

answers:

2

Using T-SQL, I would like to execute an UPDATE statement that will SET columns only if the corresponding variables are defined.

Here's a simple pseudo-tsql example of what I'm trying to accomplish:


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

From what I can tell by reading how IF conditions work in T-SQL, in order to accomplish the same result as the above pseudo code, I would have to create an UPDATE statement for every IF condition - which is what I'm trying to avoid having to do.

Is it possible to dynamically SET fields/columns based on a condition using only one UPDATE statement? - If so, how?

+5  A: 

The 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
   ...
gbn
A: 

gbn gave you the right reply.
If you're like me, coming from Access and landing in the SQL Server planet, you will find this link useful:
http://sqlserver2000.databases.aspfaq.com/what-are-the-main-differences-between-access-and-sql-server.html

iDevlop