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?
The SQL UPDATE Query is used to modify the existing records in a table. You can use the WHERE clause with the UPDATE query to update the selected rows, otherwise all the rows would be affected.
To do a conditional update depending on whether the current value of a column matches the condition, you can add a WHERE clause which specifies this. The database will first find rows which match the WHERE clause and then only perform updates on those rows.
6 – Update using WITH ClauseYou can use a subquery in the WITH clause (called a CTE or Common Table Expression) to update data in one table from another table. WITH subquery AS ( SELECT account_id, account_number, person_id FROM account ) UPDATE person SET account_number = subquery.
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    ... 
                        I think this will be useful:
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   Do you like it? Enjoy.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With