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.


Random Solutions  
 
programming4us programming4us