|
|
Question : I want to update a column VIA insert trigger
|
|
I have a SQL query that creates a table, then creates triggers for the table. The triggers need to update a column in the new record from sums and counts in other tables. I'm pretty new to writing queries, so Im a bit confused. I just cannot seem to get the inserted record values to come up. I've tried using variabbles and using the inserted.values from the inserted table. I need this working tomorrow so any help is appreciated.....
thanks
Code Snippet:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
|
/* ---------- CREATE THE TABLE --------------------*/
CREATE TABLE [dwANALYZER].[CalData] (
[F1] [smalldatetime] NULL ,
[MasterAgencyID] [varchar] (20) COLLATE Latin1_General_BIN NULL ,
[ProducerID] [varchar] (5) COLLATE Latin1_General_BIN NULL ,
[Issue_State] [nvarchar] (50) COLLATE Latin1_General_BIN NULL ,
[Category] [nvarchar] (50) COLLATE Latin1_General_BIN NULL ,
[Line] [nvarchar] (50) COLLATE Latin1_General_BIN NULL ,
[Form] [varchar] (4) COLLATE Latin1_General_BIN NULL ,
[Origin] [nvarchar] (10) COLLATE Latin1_General_BIN NULL ,
[Originator] [nvarchar] (80) COLLATE Latin1_General_BIN NULL ,
[Policy_Type] [nvarchar] (50) COLLATE Latin1_General_BIN NULL ,
[Quotes] [int] NULL ,
[QuotePremium] [decimal](38, 2) NULL,
[Issues] [int] NULL ,
[IssuePremium] [decimal](38, 2) NULL,
[Renewals] [int] NULL ,
[RenewalPremium] [decimal](38, 2) NULL,
[Cancels] [int] NULL ,
[CancelPremium] [decimal](38, 2) NULL
) ON [PRIMARY]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*----------------- create triggers here ----------------------*/
CREATE TRIGGER Q_INSERT ON CalData AFTER INSERT
AS
BEGIN
DECLARE @F1 smalldatetime
DECLARE @MasterAgencyID varchar(20)
DECLARE @ProducerID varchar(5)
DECLARE @Issue_State nvarchar(50)
DECLARE @Category nvarchar (50)
DECLARE @Line nvarchar (50)
DECLARE @Form varchar (4)
DECLARE @Origin nvarchar (10)
DECLARE @Originator nvarchar (80)
DECLARE @Policy_Type nvarchar (50)
SELECT
@F1 = [F1],
@MasterAgencyID = [MasterAgencyID],
@ProducerID = [ProducerID],
@Issue_State = [Issue_State],
@Category = [Category],
@Line = [Line],
@Form = [Form],
@Origin = [Origin],
@Originator = [Originator],
@Policy_Type = [Policy_Type] FROM inserted
/* -------ive tried it two ways ------------------------*/
UPDATE CalData
Set [Quotes] = (SELECT COUNT(pqi.POLICY_NUMBER) AS Policies
FROM dbo.tblCalendarDate cal LEFT OUTER JOIN
dbo.A_PolicyQuoteAndIssueWithInspectionsPlusW1 pqi ON CONVERT(char(10), cal.F1, 102) = CONVERT(CHAR(10), pqi.QuoteDate, 102)
GROUP BY cal.F1, pqi.MasterAgencyID, pqi.ProducerID, pqi.Issue_State, pqi.Category, pqi.Line, pqi.Origin, pqi.Originator, pqi.Policy_Type, pqi.Form
HAVING (cal.F1 = inserted.F1) AND (pqi.MasterAgencyID = inserted.MasterAgencyID) AND (pqi.ProducerID = inserted.ProducerID) AND (pqi.Issue_State = inserted.Issue_State)
AND (pqi.Category = inserted.Category) AND (pqi.Line = inserted.Line) AND (pqi.Form = inserted.Form)
AND (pqi.Origin = inserted.Origin) AND (pqi.Originator = inserted.Originator) AND (pqi.Policy_Type = inserted.Policy_Type))
/* -------------------------and this way as well ---------------*/
UPDATE CalData
Set [QuotePremium] = (SELECT SUM(pqi.IssuedPremium) AS Premium
FROM dbo.tblCalendarDate cal LEFT OUTER JOIN
dbo.A_PolicyQuoteAndIssueWithInspectionsPlusW1 pqi ON CONVERT(char(10), cal.F1, 102) = CONVERT(CHAR(10), pqi.QuoteDate, 102)
GROUP BY cal.F1, pqi.MasterAgencyID, pqi.ProducerID, pqi.Issue_State, pqi.Category, pqi.Line, pqi.Origin, pqi.Originator, pqi.Policy_Type, pqi.Form
HAVING (cal.F1 = @F1) AND (pqi.MasterAgencyID = @MasterAgencyID) AND (pqi.ProducerID = @ProducerID) AND (pqi.Issue_State = @Issue_State)
AND (pqi.Category = @Category) AND (pqi.Line = @Line) AND (pqi.Form = @Form)
AND (pqi.Origin = @Origin) AND (pqi.Originator = @Originator) AND (pqi.Policy_Type = @Policy_Type))
end
|
Open in New Window
Select All
|
Answer : I want to update a column VIA insert trigger
|
|
>>Can you post how you would write it without the primary key reference?<<
CREATE TRIGGER Q_INSERT ON CalData
AFTER INSERT
AS
BEGIN UPDATE c Set Quotes = d.Policies FROM CalData c Inner Join ( Select i.MasterAgencyID, i.ProducerID, i.Issue_State, i.Category, i.Line, i.Form, i.Origin, i.Originator, i.Policy_Type, COUNT(*) Policies From dbo.tblCalendarDate cal Inner Join Inserted i On cal.F1 = i.F1 Inner Join dbo.A_PolicyQuoteAndIssueWithInspectionsPlusW1 pqi ON cal.F1 = pqi.QuoteDate And ISNULL(i.MasterAgencyID, '') = ISNULL(pqi.MasterAgencyID, '') And ISNULL(i.ProducerID, '') = ISNULL(pqi.ProducerID, '') And ISNULL(i.Issue_State, '') = ISNULL(pqi.Issue_State, '') And ISNULL(i.Category, '') = ISNULL(pqi.Category, '') And ISNULL(i.Line, '') = ISNULL(pqi.Line, '') And ISNULL(i.Form, '') = ISNULL(pqi.Form, '') And ISNULL(i.Origin, '') = ISNULL(pqi.Origin, '') And ISNULL(i.Originator, '') = ISNULL(pqi.Originator, '') AND ISNULL(i.Policy_Type, '') = ISNULL(pqi.Policy_Type, '') Group By i.MasterAgencyID, i.ProducerID, i.Issue_State, i.Category, i.Line, i.Form, i.Origin, i.Originator, i.Policy_Type ) d On ISNULL(i.MasterAgencyID, '') = ISNULL(d.MasterAgencyID, '') And ISNULL(i.ProducerID, '') = ISNULL(d.ProducerID, '') And ISNULL(i.Issue_State, '') = ISNULL(d.Issue_State, '') And ISNULL(i.Category, '') = ISNULL(d.Category, '') And ISNULL(i.Line, '') = ISNULL(d.Line, '') And ISNULL(i.Form, '') = ISNULL(d.Form, '') And ISNULL(i.Origin, '') = ISNULL(d.Origin, '') And ISNULL(i.Originator, '') = ISNULL(d.Originator, '') AND ISNULL(i.Policy_Type, '') = ISNULL(d.Policy_Type, '') END
>>Is this going to work on all the records?<< That was the point I was trying to make previously (#24365600) and why you have to join using the logical table Inserted as opposed to assiging the values to local variables.
But whether it ultimately "works" I have no clue. To be totally honest, I cannot follow entirely what you are trying to achieve.
|
|
|
|
|