Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 General SQL Server Forums
 New to SQL Server Programming
 I don't understand why this is failing.

Author  Topic 

DavidChel
Constraint Violating Yak Guru

474 Posts

Posted - 2008-09-03 : 14:41:02
This is probably simple, but I can't figure out why this is failing. Here's the code:

/* This is the Sorels trigger which keeps track of changes made to sales orders
which are in the open state. The trigger on Somast tracks value changes when
changing states. */

IF EXISTS ( SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[SOMODAUDIT]')
AND OBJECTPROPERTY(id, N'IsTrigger') = 1 )
DROP TRIGGER [dbo].[SOMODAUDIT]
GO

CREATE TRIGGER SOMODAUDIT ON M2MData01.dbo.sorels
AFTER UPDATE, INSERT, DELETE
AS
SET NOCOUNT ON
DECLARE @PRICE AS MONEY
IF EXISTS ( SELECT somast.fstatus
FROM dbo.somast,
inserted,
deleted
WHERE ( dbo.somast.fsono = inserted.fsono
OR dbo.somast.fsono = deleted.fsono)
AND somast.fstatus = 'Open' )
BEGIN
IF EXISTS ( SELECT *
FROM inserted )
AND EXISTS ( SELECT *
FROM deleted ) -- Update
BEGIN
INSERT CHELTONCUSTOMIZATIONS.DBO.SOMODS
(
FENUMBER,
FSONO,
FRELEASE,
FDATECHANGED,
fstatusOLD,
fstatusNEW,
FORDERQTYOLD,
FORDERQTYNEW,
FUNETPRICEOLD,
FUNETPRICENEW,
PRICEMOD,
MODTYPE,
FKSorelsID
)
SELECT I.FENUMBER,
I.FSONO,
I.FRELEASE,
GETDATE(),
'Open',
'Open',
D.FORDERQTY,
I.FORDERQTY,
D.FUNETPRICE,
I.FUNETPRICE,
( ( INSERTED.forderqty - INSERTED.finvqty
- ( CASE WHEN ( ( INSERTED.fshipbook
+ INSERTED.fshipbuy
+ INSERTED.fshipmake )
- INSERTED.finvqty ) <= 0
OR COALESCE(DBO.GETSHIPPEDNOTINVOICEDQTY(INSERTED.fsono + INSERTED.finumber + INSERTED.frelease), 0) <= 0
THEN 0
WHEN ( INSERTED.fshipbook
+ INSERTED.fshipbuy
+ INSERTED.fshipmake )
- INSERTED.finvqty < COALESCE(DBO.GETSHIPPEDNOTINVOICEDQTY(INSERTED.fsono + INSERTED.finumber + INSERTED.frelease), 0)
THEN ( INSERTED.fshipbook
+ INSERTED.fshipbuy
+ INSERTED.fshipmake
- INSERTED.finvqty )
ELSE COALESCE(DBO.GETSHIPPEDNOTINVOICEDQTY(INSERTED.fsono + INSERTED.finumber + INSERTED.frelease), 0)
END ) ) * INSERTED.funetprice ),
'C',
I.identity_column
FROM INSERTED I
INNER JOIN DELETED D ON I.IDENTITY_COLUMN = D.IDENTITY_COLUMN
WHERE I.FUNETPRICE <> D.FUNETPRICE
OR I.FORDERQTY <> D.FORDERQTY
RETURN
END
IF NOT EXISTS ( SELECT *
FROM inserted )
AND EXISTS ( SELECT *
FROM deleted ) -- Delete
BEGIN
INSERT CHELTONCUSTOMIZATIONS.DBO.SOMODS
(
FENUMBER,
FSONO,
FRELEASE,
FDATECHANGED,
fstatusOLD,
fstatusNEW,
FORDERQTYOLD,
FUNETPRICEOLD,
PRICEMOD,
MODTYPE,
FKSorelsID
)
SELECT D.FENUMBER,
D.FSONO,
D.FRELEASE,
GETDATE(),
'Open',
'Open',
D.FORDERQTY,
D.FUNETPRICE,
( 0 - D.FNETPRICE ) AS PRICEMOD,
'D',
d.IDENTITY_column
FROM DELETED D

RETURN
END

IF EXISTS ( SELECT *
FROM inserted )
AND NOT EXISTS ( SELECT *
FROM deleted ) -- Insert
BEGIN
INSERT CHELTONCUSTOMIZATIONS.DBO.SOMODS
(
FENUMBER,
FSONO,
FRELEASE,
FDATECHANGED,
fstatusOLD,
fstatusNEW,
FORDERQTYNEW,
FUNETPRICENEW,
PRICEMOD,
MODTYPE,
FKSorelsID
)
SELECT I.FENUMBER,
I.FSONO,
I.FRELEASE,
GETDATE(),
'Open',
'Open',
I.FORDERQTY,
I.FUNETPRICE,
( I.FNETPRICE ) AS PRICEMOD,
'N',
I.identity_column
FROM INSERTED I

RETURN
END
END
GO


A sample of errors follows:

Server: Msg 107, Level 16, State 2, Procedure SOMODAUDIT, Line 21
The column prefix 'INSERTED' does not match with a table name or alias name used in the query.
Server: Msg 107, Level 16, State 1, Procedure SOMODAUDIT, Line 21
The column prefix 'INSERTED' does not match with a table name or alias name used in the query.
Server: Msg 107, Level 16, State 1, Procedure SOMODAUDIT, Line 21
The column prefix 'INSERTED' does not match with a table name or alias name used in the query.
Server: Msg 107, Level 16, State 1, Procedure SOMODAUDIT, Line 21
The column prefix 'INSERTED' does not match with a table name or alias name used in the query.


What am I doing wrong?

DavidChel
Constraint Violating Yak Guru

474 Posts

Posted - 2008-09-03 : 14:54:39
I also re-wrote the beginning as:

CREATE TRIGGER SOMODAUDIT ON M2MData01.dbo.sorels
AFTER UPDATE, INSERT, DELETE
AS
SET NOCOUNT ON
DECLARE @PRICE AS MONEY
IF EXISTS ( SELECT dbo.somast.fsono
FROM dbo.somast
WHERE somast.fstatus = 'Open' AND dbo.somast.fsono = COALESCE(inserted.fsono, deleted.fsono))


It throws the same errors.
Go to Top of Page

blindman
Master Smack Fu Yak Hacker

2365 Posts

Posted - 2008-09-03 : 16:24:12
Because you are referencing the table as INSERTED when you have aliased it as "I".

...INSERTED.forderqty - INSERTED.finvqty
...
FROM INSERTED I

That is what happens when you use unnecessary aliases.

Boycotted Beijing Olympics 2008
Go to Top of Page

DavidChel
Constraint Violating Yak Guru

474 Posts

Posted - 2008-09-03 : 17:55:13
Thanks Blindman, that worked.
Go to Top of Page
   

- Advertisement -