我正在构建将由我的Web API应用程序使用的存储过程。现在,我有多个数据库和多个存储过程,它们返回API合同指定的所有数据。我想要做的是定制我的SP,就像他们只返回更新的行一样。例如。我在表中有10列,用户更改了2列,存储过程检查哪些列受影响,只返回那些列,对于所有其他列,它应返回null。到目前为止,我正在考虑创建一个存储ProductId
和UpdatedFields
的新表,因此当触发更新SP时,它将更新名称和类别字段,并将这些列名存储在{{1}下的新表中像逗号分隔的字符串(UpdatedFields
,Name
...)和检索成员数据SP不会返回Category
也不会Price
(那些应该为空)但只是{ {1}}和Quantity
。
感谢任何帮助。
答案 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
会使事情变得更复杂,因为每次更改都会有一行,通常不会因所有单独更改而更改所有列