我有一个在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