• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 266
  • Last Modified:

Update table after an Insert

I am looking for a trigger that will update my table after an Insert.

Table to run trigger on "TEMP"
When a record is entered I want to take the Field "MTSS_NAME" and go to the table called "ANALYST"

Analyst Table Contains the Fields "EMAIL" and "ManagerName"

Find all of the Email with the "ManagerName = to Mtss_Name" and create a string separated with a ";" and update the table "TEMP" with that string into the field "DistrictDL"

Can someone help Please.
0
xeroxcanada
Asked:
xeroxcanada
1 Solution
 
Patrick MatthewsCommented:
zeroxcanada,

With respect, that is not a good idea.  For example, while this can be done to get the value correct at the INSERT time, what happens if later on the emails on the analyst table change?

You are better off to instead use a select query at the time you need the data.  This is rather easily done using FOR XML PATH, assuming you are on SQL 2005 or later.

Patrick
0
 
xeroxcanadaAuthor Commented:
Sorry but I am really green here.
I need to update the record as it is entered into the database.
The emails are inserted once.
0
 
tliottaCommented:
If it really must be done, I would use a BEFORE INSERT trigger in DB2 to set the value of the column before it gets written to the table. I'm not sure of a good reason for doing it as an update after it's written.

I don't have appropriate experience with SQL Server to provide a reliable example.

Tom
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
xeroxcanadaAuthor Commented:
Final trigger that works.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER TRIGGER [IS_USA]
ON [dbo].[temp]
AFTER INSERT
AS

DECLARE @p1 varchar (50)  
DECLARE @p2 varchar (10)


BEGIN
  SELECT                        
      @p1 = MTSS_Name,
      @p2 = Escal_ID,

FROM Inserted

      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON;

    -- Insert statements for procedure here

INSERT temp_email (Entry, Email)

SELECT Entry, Email
FROM Analyst  
WHERE ManagerName = @p1

--(select * from temp_email)

declare @sqlstr varchar(max),
            @crtid integer, @Getmail varchar (max)

set  @sqlstr =  ''

DECLARE email_list CURSOR FOR (SELECT Entry  FROM temp_email)
OPEN email_list
      FETCH next FROM email_list INTO @crtid
      WHILE @@fetch_status=0
      BEGIN
            set @sqlstr = @sqlstr + (select email from temp_email where Entry = @crtid) + ';'
      FETCH next FROM email_list INTO @crtid
      END
CLOSE email_list
DEALLOCATE email_list
DELETE temp_email
--Print @sqlstr
EXEC CreateDL @sqlstr,@p2

END
0
 
Anthony PerkinsCommented:
I realize you are have stated you are "really green here", however, you should know that TRIGGERs fire once per statement and not once per row.  Clearly the way you have it coded does not apply when more than one row is INSERTed.
0
 
xeroxcanadaAuthor Commented:
I Need to understand this a bit more.
I have a form that does an Insert into the DB and inserts a new row.
So when that happens the trigger fires.

So if the form is sent twice lets say at the same time will the trigger fire twice or once?
The chance of someone filling in the form at the exact same time is very minimal.
I only get about 30 inserts in an 8-12 hour period.
So what am I missing?
0
 
Anthony PerkinsCommented:
So what am I missing?
If your INSERT statement inserts more than one row, the TRIGGER will fire only once and in consequence @p1 and @p2 will contain the values from one row, even though INSERTED contains more than one row. If this will never happen (a single user INSERTs more than one row at one time) than you should be able to sleep fine.
0
 
xeroxcanadaAuthor Commented:
zzzzzzzzzzzzzzzzzzzzzzzzzzz...Thank You for clearing that up.
0
 
xeroxcanadaAuthor Commented:
Figured it out
0

Featured Post

Veeam and MySQL: How to Perform Backup & Recovery

MySQL and the MariaDB variant are among the most used databases in Linux environments, and many critical applications support their data on them. Watch this recorded webinar to find out how Veeam Backup & Replication allows you to get consistent backups of MySQL databases.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now