带有各种变量的SQL Update命令
我的桌子像: 项目带有各种变量的SQL Update命令,sql,sql-server,tsql,sql-update,Sql,Sql Server,Tsql,Sql Update,我的桌子像: 项目 ID(int) 名称(varchar) 日期(日期时间) 值(整数) 我想写一个SQL命令,它将只更新这些不为null的值 我想做的伪代码: UPDATE Items SET IF @NewName IS NOT NULL { Items.Name = @NewName } IF @NewDate IS NOT NULL { Items.Date = @NewDate } IF @newValue IS NOT NULL
- ID(int)
- 名称(varchar)
- 日期(日期时间)
- 值(整数)
UPDATE Items
SET
IF @NewName IS NOT NULL
{
Items.Name = @NewName
}
IF @NewDate IS NOT NULL
{
Items.Date = @NewDate
}
IF @newValue IS NOT NULL
{
Items.Valie = @NewValue
}
WHERE Items.ID = @ID
可以这样写查询吗?您可以这样做:
UPDATE Items
SET Name = ISNULL(@NewName,Name),
[Date] = ISNULL(@NewDate,[Date]),
Value = ISNULL(@NewValue,Value)
WHERE ID = @ID
declare @sql varchar(1000)
set @sql = 'UPDATE Items SET '
IF @NewName IS NOT NULL
@sql = @sql + 'Items.Name = ' + @NewName
IF @NewDate IS NOT NULL
@sql = @sql + 'Items.Date = ' + @NewDate
IF @newValue IS NOT NULL
@sql = @sql + 'Items.Valie = ' + @NewValue
@sql = @sql + 'WHERE Items.ID = ' + @ID
exec(@sql)
在update中不能使用if语句,您可以使用下面的查询进行条件更新
'UPDATE Items
SET
Items.Name = (case when @NewName is not null then @NewName else end) ,
Items.Date = (case when @NewDate is not null then @newDate else end ),
Items.Valie = (case when @Valie is not null then @Valie else end )
其中Items.ID=@ID'我可能会对每个列进行单独的查询,因为您只有3个
updateitems SET Name=@NewName,其中Name=null
,然后执行下一个操作,updateitems SET Date=@NewDate,其中Date=null
。这不是一个可重用或可扩展的解决方案,但它适用于一次性场景。@Adam,它的开销是占用锁3次您在回答中所做的假设。我想说的是,@NewDate
更可能是一个DATETIME
,而不是一个string。这引入了SQL注入的可能性。