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