0

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

任何帮助表示赞赏。

4

1 回答 1

1

您可以使用@DevN00B 的建议来识别修改的行,然后使用 a CASEfor each column 返回新值或NULL

所有者执行的UPDATE操作会将GETDATE()现有记录的 ModifyDate 设置为并插入带有NULLModifyDate的更改记录

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

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

于 2013-07-24T14:54:27.070 回答