Hi all,
I am beginner on SQL and I am stuck with trigger.
I'm trying to create a Trigger for two columns (KG ,Items)
Basicly if column KG is inserted/updated then compute column Items. If column Items is inserted/updated then compute column KG.
It is kind of converter.I have tried as below: - --------------------------------------------------------
-
CREATE TRIGGER [dbo].[UpdateItemsOrKg]
-
ON [dbo].[UpdateItemsOrKg]
-
AFTER INSERT,UPDATE
-
AS
-
BEGIN
-
SET NOCOUNT ON;
-
-
DECLARE @Factor decimal(8,3)
-
-
SELECT @Factor=Factor FROM dbo.CurrentFactors
-
-
IF UPDATE(Items)
-
BEGIN
-
UPDATE [dbo].[UpdateItemsOrKg]
-
SET [KG] = @items*@Factors
-
END
-
-
IF UPDATE(KG)
-
BEGIN
-
UPDATE [dbo].[UpdateItemsOrKg]
-
SET [Items] = @KG/@Factors
-
END
-
--------------------------------------
Is no problem when colums is updated (procedure from excel spreadsheet), updated is only one column KG or Items, but when is new record then updated column has a null value and another computed column is calculate absolutely correctly.
Thanks for any advice.
5 1802
There is a way to do this, but it's not pretty.
Actually, what you're doing isn't very pretty either. You'd probably be best computing this in intermediary code (stored procedure, applicationc code, etc), since it's a pretty strange feature of a table.
That said, there is a function called COLUMNS_UPDATED which will indicate which column was updated. If you use it in conjunction with COLUMNPROPERTY, you can tell which columns on your table were updated.
NeoPa 32,556
Expert Mod 16PB
Have you considered whether the update within the trigger routine would trigger itself?
You would want to avoid an interminable loop I would suggest.
Good point, NeoPa. To add to my previous reply...
An AFTER UPDATE trigger on table that updates the same table (a "direct recursion") will not, by default, trigger itself. However, if you were to set the database option RECURSIVE_TRIGGERS (I don't recommended it), then a direct recusion could occur, allowing for the trigger to trigger itself. This would then cause a stack overflow error, or as SQL Server calls it, "exceeding maximum nesting level."
Of course, if RECURSIVE_TRIGGERS is set, then you could simply do an INSTEAD OF UPDATE trigger, as INSTEAD OF triggers cannot cause direct recursion. If you go with an INSTEAD OF trigger, you will need to update all columns yourself.
NeoPa 32,556
Expert Mod 16PB
It sounds like less of a problem than I'd imagined actually. Excuse my relative inexperience with SQL Server. I'm just getting back into it again since getting MCP in 2000 years ago (I mention that merely to illustrate how little an MCP can know - especially after a lapse of a few years).
Alex I agree with you, it is not pretty what I've tried to do.
It seems that both the best and fastest way (for me) it will be computing this in application code.
I just thought that maybe in SQL is feature which I don't know yet. As I have mentioned I am beginner( I started play with SQL 2 months ago). Unfortunately I have to finish project quickly so I have no time to check COLUMNS_UPDATED, but it seems that it should be a good option.If it comes to "avoid an interminable loop" I think it would be stop by
if @@Nestlevel>1
RETURN
Thanks for all advice.
Sign in to post your reply or Sign up for a free account.
Similar topics
by: Dave C. |
last post by:
Hello,
I have created the following trigger:
CREATE TRIGGER tr_UDFTest ON UserDefinedFields FOR INSERT, UPDATE
AS
DECLARE @foobar varchar(100)
SELECT @foobar= foobar FROM inserted
IF (...
|
by: Mary |
last post by:
We are developing a DB2 V7 z/OS application which uses a "trigger"
table containing numerous triggers - each of which is activated by an
UPDATE to a different column of this "trigger" table. When...
|
by: Bill Smith |
last post by:
The initial row is inserted with the colPartNum column containing a valid
LIKE pattern, such as (without the single quotes) 'AB%DE'.
I want to update the column value with the results of a query...
|
by: JohnO |
last post by:
Thanks to Serge and MarkB for recent tips and suggestions.
Ive rolled together a few stored procedures to assist with creating
audit triggers automagically. Hope someone finds this as useful as...
|
by: Bob Stearns |
last post by:
I have two (actually many) dates in a table I want to validate on
insertion. The following works in the case of only one WHEN clause but
fails with two (or more), with the (improper?...
|
by: Peter Erickson |
last post by:
I am running postgresql 7.4.2 and having problems creating a trigger
function properly. I keep getting the following error:
ERROR: OLD used in query that is not in rule
I have a table called...
|
by: teddysnips |
last post by:
I need a trigger (well, I don't *need* one, but it would be optimal!)
but I can't get it to work because it references ntext fields.
Is there any alternative? I could write it in laborious code...
|
by: mob1012 via DBMonster.com |
last post by:
Hi All,
I wrote last week about a trigger problem I was having. I want a trigger to
produce a unique id to be used as a primary key for my table. I used the
advice I received, but the trigger is...
|
by: Ots |
last post by:
I'm using SQL 2000, which is integrated with a VB.NET 2003 app.
I have an Audit trigger that logs changes to tables. I want to apply
this trigger to many different tables. It's the same trigger,...
|
by: Brad Orders |
last post by:
Hi all
Here is my situation:
When table A is updated, I need to record some data in table B, then apply the update to table A
Normally I would use a FOR UPDATE trigger, but the table has a...
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: Sonnysonu |
last post by:
This is the data of csv file
1 2 3
1 2 3
1 2 3
1 2 3
2 3
2 3
3
the lengths should be different i have to store the data by column-wise with in the specific length.
suppose the i have to...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new...
| |