2012-03-09 42 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