我有一個在SQL服務器命名爲「tblProperties
」表,該表具有字段使用單一的更新不同領域
productid
length
weight
height
depth
我會在不同的時間間隔更新length,weight,height
。 現在我正在爲每個屬性更新編寫一個單獨的更新存儲過程。
我們如何可以寫一個更新查詢/ SP所有,這樣我可以通過「productid
」和像weight
或height
等更新欄..
我有一個在SQL服務器命名爲「tblProperties
」表,該表具有字段使用單一的更新不同領域
productid
length
weight
height
depth
我會在不同的時間間隔更新length,weight,height
。 現在我正在爲每個屬性更新編寫一個單獨的更新存儲過程。
我們如何可以寫一個更新查詢/ SP所有,這樣我可以通過「productid
」和像weight
或height
等更新欄..
declare @length INT, @weight INT, @height INT, @depth INT
set @length = 7878
SET @weight = NULL
SET @height = NULL
SET @depth = NULL
update tblProperties
SET length= (CASE WHEN @length IS NULL THEN length ELSE @length END),
weight = (CASE WHEN @weight IS NULL THEN weight ELSE @weight END),
height = (CASE WHEN @height IS NULL THEN height ELSE @height END),
depth = (CASE WHEN @depth IS NULL THEN depth ELSE @depth END),
WHERE productid = xxxxxxx
+1。你也可以使用'SET item = ISNULL(@item,item)'或'SET item = COALESCE(@item,item)'。 – 2012-03-09 08:29:25
謝謝@simon ..這是工作正常.. 一件事我需要澄清..是否有任何性能問題,通過使用此而不是單獨的查詢? – Olivarsham 2012-03-09 08:37:10
談到性能,我認爲Andriy的想法更好,這是使用COALESCE關鍵字 – 2012-03-09 09:38:27
我認真地想知道你爲什麼會打擾寫一個存儲過程時,普通的SQL將做得很好 – Bohemian 2012-03-09 07:27:28
@Bohemian:只能授予EXECUTE權限,而不是SELECT,UPDATE,INSERT,DELETE,可能嗎? – 2012-03-09 08:28:09
@AndriyM是的,但談論混淆權限。當然,向用戶授予更新等更簡單,更直接。除非你需要授予特定的列我想。基本上,我是反儲存過程。 – Bohemian 2012-03-09 08:42:31