Ответ 1
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
...
Используя T-SQL, я хотел бы выполнить оператор UPDATE, который будет устанавливать столбцы только в том случае, если определены соответствующие переменные.
Вот простой пример pseudo-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
Из того, что я могу сказать, прочитав, как условия IF работают в T-SQL, для достижения того же результата, что и указанный выше псевдокод, мне пришлось бы создать инструкцию UPDATE для каждого условия IF - это то, что я ' m, чтобы избежать необходимости делать.
Можно ли динамически устанавливать поля/столбцы на основе условия, используя только один оператор UPDATE? - Если да, то как?
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
...
Я думаю, что это будет полезно:
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
Вам нравится? Наслаждайтесь.