仅返回数据库中的更新字段

时间:2013-07-24 13:48:56

标签: sql stored-procedures asp.net-web-api

我正在构建将由我的Web API应用程序使用的存储过程。现在,我有多个数据库和多个存储过程,它们返回API合同指定的所有数据。我想要做的是定制我的SP,就像他们只返回更新的行一样。例如。我在表中有10列,用户更改了2列,存储过程检查哪些列受影响,只返回那些列,对于所有其他列,它应返回null。到目前为止,我正在考虑创建一个存储ProductIdUpdatedFields的新表,因此当触发更新SP时,它将更新名称和类别字段,并将这些列名存储在{{1}下的新表中像逗号分隔的字符串(UpdatedFieldsName ...)和检索成员数据SP不会返回Category也不会Price(那些应该为空)但只是{ {1}}和Quantity

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用@ DevN00B的建议来识别已修改的行,然后使用CASE为每列返回新值或NULL

所有者执行的UPDATE会将现有记录的ModifyDate设置为GETDATE(),并使用NULL ModifyDate

插入已更改的记录

GET程序将类似于以下内容

SELECT 
CASE WHEN New.Name = Old.Name THEN NULL ELSE New.Name END
CASE WHEN New.Category = Old.Category THEN NULL ELSE New.Category END
...
FROM Product Old
JOIN Product New
ON Old.ProductID = New.ProductID
AND Old.ModifyDate IS NOT NULL
AND New.ModifyDate IS NULL

多个UPDATE会使事情变得更复杂,因为每次更改都会有一行,通常不会因所有单独更改而更改所有列