如果表中的某个值发生更改,我需要从 SQL 数据库中的 select 语句中提取一行。
例如,我有一个在表中调用price
的列Price
。如果用户更改price
(通过 asp.net 应用程序)的值,我想选择整行。这将在工作流中完成,并向用户发送一封电子邮件,说明在更改后更改的行。
这有意义吗?有人可以指出我要使用的程序或功能的正确方向吗?谢谢。
您可以使用 SQL 触发器来完成此操作。
有一个教程(使用您所描述的价格)显示如何在此处完成此操作:http: //benreichelt.net/blog/2005/12/13/making-a-trigger-fire-on-column-change/
好吧,为了更新一行,您必须更新该行“WHERE uniqueID = [someid]”。您不能在那之后立即运行选择吗?(SELECT * FROM [table] WHERE uniquueID = [someid])
在不知道您的数据是什么样子的情况下(或者这是什么数据库,这有点困难),但假设您有一个历史表,其中的日期和 ID 保持不变......
+----+-------+------------+
| ID | PRICE | CHNG_DATE |
+----+-------+------------+
| 1 | 2.5 | 2001-01-01 |
| 1 | 42 | 2001-01-01 |
| 2 | 4 | 2001-01-01 |
| 2 | 4 | 2001-01-01 |
| 3 | 4 | 2001-01-01 |
| 3 | 3 | 2001-01-01 |
| 3 | 2 | 2001-01-01 |
+----+-------+------------+
并且您的数据库支持With
并且Row_number
您可以编写以下内容
WITH data
AS (SELECT id,
price,
chng_date,
Row_number()
OVER (
partition BY id
ORDER BY chng_date) rn
FROM price)
SELECT data.id,
data.price new,
data_prv.price old,
data.chng_date
FROM data
INNER JOIN data data_prv
ON data.id = data_prv.id
AND data.rn = data_prv.rn + 1
WHERE data.price <> data_prv.price
那会产生这个
+----+-----+-----+------------+
| ID | NEW | OLD | CHNG_DATE |
+----+-----+-----+------------+
| 1 | 42 | 2.5 | 2001-01-01 |
| 3 | 3 | 4 | 2001-01-01 |
| 3 | 2 | 3 | 2001-01-01 |
+----+-----+-----+------------+
如果您的数据库支持LAG()
它更容易
WITH data
AS (SELECT id,
price new,
chng_date,
Lag(price)
OVER (
partition BY id
ORDER BY chng_date) old
FROM price)
SELECT id,
new,
old,
chng_date
FROM data
WHERE new <> old