如果表中的某個值發生更改,我需要從SQL數據庫中選擇一條語句。根據列的值是否更改從SQL數據庫中拉取一行
例如,我在Price
表中有一列名爲price
的列。如果用戶更改price
的值(通過asp.net應用程序),我想選擇整行。這將在工作流程中完成,並向用戶發送一封電子郵件,該電子郵件發生更改後被更改的行。
這是否有意義?有人能指出我正在使用某個程序或功能的正確方向嗎?謝謝。
如果表中的某個值發生更改,我需要從SQL數據庫中選擇一條語句。根據列的值是否更改從SQL數據庫中拉取一行
例如,我在Price
表中有一列名爲price
的列。如果用戶更改price
的值(通過asp.net應用程序),我想選擇整行。這將在工作流程中完成,並向用戶發送一封電子郵件,該電子郵件發生更改後被更改的行。
這是否有意義?有人能指出我正在使用某個程序或功能的正確方向嗎?謝謝。
您可以使用SQL觸發器來完成此操作。
有,說明如何做到這一點這裏的教程(使用像你描述的價格):http://benreichelt.net/blog/2005/12/13/making-a-trigger-fire-on-column-change/
不知道你的數據是什麼樣子(或這是什麼數據庫,這是一個有點困難),但假設你有一個日期和保持這樣相同的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
如果你的數據庫支持LAG()
這將產生這種
+----+-----+-----+------------+
| ID | NEW | OLD | CHNG_DATE |
+----+-----+-----+------------+
| 1 | 42 | 2.5 | 2001-01-01 |
| 3 | 3 | 4 | 2001-01-01 |
| 3 | 2 | 3 | 2001-01-01 |
+----+-----+-----+------------+
它甚至eaiser
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
什麼是您的數據是什麼樣子?價格是歷史表嗎?如果它是一個歷史記錄表什麼是主鍵,什麼是確定之前和之後的什麼是日期字段? – 2012-08-06 20:02:42
有沒有這樣的事情作爲** SQL數據庫** --- * * SQL *只是*結構化查詢語言* - 許多數據庫系統使用的語言,但不是**數據庫產品本身。這將真正有助於知道你正在使用的實際的**數據庫系統**(以及哪個版本).... – 2012-08-06 20:25:20