2012-03-09 27 views
0

我有一個在SQL服務器命名爲「tblProperties」表,該表具有字段使用單一的更新不同領域

productid 
length 
weight 
height 
depth 

我會在不同的時間間隔更新length,weight,height。 現在我正在爲每個屬性更新編寫一個單獨的更新存儲過程。

我們如何可以寫一個更新查詢/ SP所有,這樣我可以通過「productid」和像weightheight等更新欄..

+0

我認真地想知道你爲什麼會打擾寫一個存儲過程時,普通的SQL將做得很好 – Bohemian 2012-03-09 07:27:28

+1

@Bohemian:只能授予EXECUTE權限,而不是SELECT,UPDATE,INSERT,DELETE,可能嗎? – 2012-03-09 08:28:09

+0

@AndriyM是的,但談論混淆權限。當然,向用戶授予更新等更簡單,更直接。除非你需要授予特定的列我想。基本上,我是反儲存過程。 – Bohemian 2012-03-09 08:42:31

回答

3
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 
+2

+1。你也可以使用'SET item = ISNULL(@item,item)'或'SET item = COALESCE(@item,item)'。 – 2012-03-09 08:29:25

+0

謝謝@simon ..這是工作正常.. 一件事我需要澄清..是否有任何性能問題,通過使用此而不是單獨的查詢? – Olivarsham 2012-03-09 08:37:10

+0

談到性能,我認爲Andriy的想法更好,這是使用COALESCE關鍵字 – 2012-03-09 09:38:27