簡體   English   中英

僅在選定列上更新SQL

[英]Update SQL only on selected columns

我在C#中建立編輯菜單來編輯數據庫中的SQL行,但是我希望用戶能夠選擇特定行中要更新的列,如果他們將該框留空,則我不想更新該列。 例如

用戶看到三個框,他可以在一個框內輸入一些內容,這將反映僅更新該行中的一列,其余列將保持原樣。 我開始執行這樣的事情

string RowUpdate ="";
if(Title !="" && Author =="" && Pages==""){
RowUpdate = "Update BookTable set Title=@Title where BookID=@ID";
}
else if (Title =="" && Author !="" && Pages ==""){
RowUpdate = "Update BookTable set Author=@Author where BookID=@ID";
}

邏輯完成后,將選擇正確的SQL,因為您可以看到只有3個文本框的這種邏輯具有9種不同的結果,並且隨着編輯行的增長呈指數級增長。

我不知道這是否可能,但是如果沒有輸入任何值,是否有一種方法可以更新唯一的特定列,所以我不必編寫龐大的邏輯來僅更新特定的列?

就像是

 RowUpdate = "Update BookTable set (IF null Skip Title=@Title),(If null Skip   Author=@Author), (If null Skip Pages=@Pages) where BookID=@ID

或任何其他方法可以更簡單,更快捷地執行此操作? 謝謝你的回答

這不是最佳解決方案,但希望它能夠滿足您的需要。 它將基於可用值創建查詢。

string rowUpdate = "UPDATE BookTable SET ";
if(Table != "")
rowUpdate += "Table=@table ";
if(Author != "")
rowUpdate += "Author=@author ";
.
.
rowUpdate += "WHERE BookID=@ID ";

如果不選擇更新屬性,是否可以將屬性默認設置為舊值? 這將允許您對所有屬性進行完整的行更新,並且僅在將未編輯的屬性設置為與以前相同的值時才真正更改更新的屬性。

因此,您可以在SQL中結合使用COALESCENULLIF來編寫單個UPDATE語句。

首先,讓我們創建一個臨時表來玩:

CREATE TABLE #mybooktable
(
    BookID int not null IDENTITY(1,1),
    Title nvarchar(50),
    Author nvarchar(100),
    Pages int
)
GO
INSERT #mybooktable (Title, Author, Pages) VALUES ('ABC','Mary B.',10)
INSERT #mybooktable (Title, Author, Pages) VALUES ('DEF','John D.',20)
GO

SELECT * FROM #mybooktable
GO

這是查詢。 COALESCE將選擇第一個非空值。 NULLIF將強制一個空字符串返回null。

-- variables
DECLARE @bookId int, @title nvarchar(50),  @author nvarchar(100), @pages int

-- Some test parameters. Going to only change the title here
SELECT @bookId = 1, @title = 'ABC'

UPDATE #mybooktable SET
    Title = COALESCE(NULLIF(@title,''), Title),
    Author = COALESCE(NULLIF(@author,''), Author),
    Pages = COALESCE(CASE WHEN @pages <= 0 THEN NULL ELSE @pages END, Pages)
WHERE BookID = @bookId

-- check
SELECT * FROM #mybooktable

運行此塊並弄亂測試參數。 僅已定義的參數會更改。

  • 我在頁面中插入了CASE語句,因為我假設您已經將其轉換為int了。
  • 您需要對字符串進行TRIM()刪除空格

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM