【发布时间】:2019-08-19 11:41:54
【问题描述】:
我有一个桌面应用程序,它将包含产品信息的数据表发送到 SQL Server 数据库。我只想为与接收行不同的列更新表。我想知道正确的方法是:
- 检查接收到的数据表中的值是否与实际db表中的值不同,如果是则更新表
- 如果值已修改,则将新行插入包含日志的表中
我目前在做什么:
我从新变量 (@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 列,我认为必须有更优雅的解决方案。
任何有用的提示将不胜感激。
【问题讨论】:
-
您的表格是否只有 1 列在此处更新?您的日志表和
UPDATE暗示只有Column正在更新;对吗? -
不,目标表和源表都包含 15 列,包含 ProductId、ProductName、ProductPrice 等数据@Larnu
-
您使用的是什么版本的 SQL Server?
-
@ZoharPeled 2012
-
你能在客户端做任何预处理吗?仅发回那些已更改的行。您可以使用触发器来更新日志文件,而不是使用单独的脚本。
标签: sql-server tsql sql-server-2012