2014-07-04 133 views
0

我有表所示:SQL更新命令

項目

  • ID(INT)
  • 名稱(VARCHAR)
  • 日期(日期時間)
  • 值( int)

I'd lik E要編寫SQL命令,它只會更新這些值,這是不爲空

僞的,我想怎麼辦代碼:

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 

是否有可能寫這樣的查詢?

+0

我可能會爲每一列做一個單獨的查詢,因爲你只有3. UPDATE Items SET Name = @ NewName WHERE Name = null'和n做下一個'UPDATE Items SET Date = @ NewDate WHERE Date = null'。這不是一個可重複使用或可擴展的解決方案,但它可以用於一次性場景。 – Adam

+0

@Adam有3倍鎖定的開銷 – Paparazzi

回答

2
UPDATE Items 
SET Name = ISNULL(@NewName,Name), 
    [Date] = ISNULL(@NewDate,[Date]), 
    Value = ISNULL(@NewValue,Value) 
WHERE ID = @ID 
-2

你可以讓這樣的事情:

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) 
+1

你在回答中做出了相當的假設。我可以說'@ NewDate'很可能是'DATETIME'而不是字符串 – Lamak

+0

這引入了SQL注入的可能性。 –

0

您cannt使用,如果在更新語句,您可以在狀態

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

WHERE Items.ID = @使用以下查詢更新ID'