我有一个桌面应用程序,该应用程序将包含有关产品信息的数据表发送到SQL Server数据库。我只想为与收到的行不同的列更新表。我想知道什么是正确的方法:
我目前正在做什么:
我从新变量(@OldValue)中的数据中选择当前值,然后将其与接收到的值(@NewValue)进行比较。如果值不同,我只需更新该列,然后在日志表中插入一条新记录。
DECLARE @ProductId = 333
IF @OldValue <> @NewValue
BEGIN
UPDATE dbo.ProductTable
SET Column1 = @NewValue
WHERE
ProductId = @ProductId
INSERT INTO
dbo.Logs
VALUES
(@ProductId, @ModifiedColumn, @OldValue, @NewValue, GETDATE())
END
我对需要更新的每一列进行检查(如果数据已更改),但是收到的数据表包含大约15列,我认为必须有一个更优雅的解决方案。
任何有用的提示将不胜感激。
答案 0 :(得分:1)
我看到这种有问题的规律性。在大多数情况下,我们将所有列连接起来,并用诸如<app-primary-button [disabled]="true"></app-primary-button>
之类的固定字符串分隔,然后将'||'
函数应用于两个表。如果哈希值相同,则不更新该行。如果不同,我们将对其进行更新...
如果我重用您的代码,它可能是这样的:
HASHBYTES('MD5',MyConcatenatedValue)
但是,由于对所有列都进行了一次检查,因此您无法轻易地将已替换的列记录下来。也许您应该考虑实现临时表。这是有关它的文章:
希望对您有帮助,告诉我是否需要更多详细信息。
答案 1 :(得分:1)
我可能会做类似下面的事情。目前仅能容纳两列,但是应该清楚如何在其中添加其他列。
<!--
Bootstrap docs: https://getbootstrap.com/docs
-->
<div class="row container">
<section>
<a href="https://www.google.com/">
<img src="https://helpx.adobe.com/content/dam/help/en/stock/how-to/visual-reverse-image-search/jcr_content/main-pars/image/visual-reverse-image-search-v2_intro.jpg" style="width: 150px;">
</a>
<h6>
Field 1
</h6>
</section>
<section>
<a href="https://www.google.com/">
<img src="https://helpx.adobe.com/content/dam/help/en/stock/how-to/visual-reverse-image-search/jcr_content/main-pars/image/visual-reverse-image-search-v2_intro.jpg" style="width: 150px;">
</a>
<h6>
Field 2
</h6>
</section>
</div>