on 02-26-2014 11:42 AM
Hi, all
I am not sure where to post this issue, since I could not find a forum for Sybase SQL anywhere.
The problem is as follows:
The definition of the update column trigger in help is this:
//--------------------------
UPDATE OF column-list | Invokes the trigger whenever a row of the associated table is updated such that a column in the column-list is modified. |
//-----------------------------
However, there are cases when the triggers are launched even when the columns are not modified (ie the same exact value is in the both OLD and NEW row)
This happens on BEFORE triggers, never saw it happening on AFTER.
Ways to replicate the problem:
1. Define a before trigger, which fires on update of a specific column in any table.
2. Run an sql which says "update table1 set column1 = column1 where ... "
3. You will see that trigger fires, even though it is not supposed to.
Is this an expected behaviour on "BEFORE" triggers?
Arcady
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Put the following line at the beginning of your trigger...
if @@rowcount = 0 return
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
If this were a sql server question, then I could tell you that this is by design. A trigger will be executed regardless of the number of rows affected (including zero) and regardless of whether any column in any of the affected rows was changed. I will also point out that PB was designed to work within this design by the inclusion of the [where clause for update/delete] option in the update properties of the datawindow. The idea is that you avoid actual row updates (in the table) where nothing has actually changed (and it also supports collision avoidance).
Based on the history, I would assume that Sybase works exactly the same.
User | Count |
---|---|
87 | |
10 | |
10 | |
9 | |
7 | |
6 | |
6 | |
5 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.