2010-02-11 4 views
29

Ho un sito che utilizza lo schema di appartenenza asp.net. Mi piacerebbe impostare un trigger sulla tabella aspnet_users che ha inserito user_id e user_name della nuova riga in un'altra tabella.Attivazione del server Sql per inserire i valori dalla nuova riga in un'altra tabella

Come si ottengono i valori dall'ultimo inserimento?

Posso selezionare entro l'ultimo date_creato ma sembra puzzolente. C'è un modo migliore?

+0

Grazie per le risposte rapido tutti. – jim

risposta

54

Prova questo per sql server

CREATE TRIGGER yourNewTrigger ON yourSourcetable 
FOR INSERT 
AS 

INSERT INTO yourDestinationTable 
     (col1, col2 , col3, user_id, user_name) 
    SELECT 
     'a' , default , null, user_id, user_name 
     FROM inserted 

go 
+2

Nota una differenza tra ciò che mostro e ciò che HLGEM mostra è che ho dato codice per mostrare come gestire le colonne nella nuova tabella diverse da quelle estratte da INSERTED: "a" usa una costante letterale, "default" usa la tabella definita di default , o "null" lasciarlo indefinito –

+1

Nota che se le 2 tabelle sono identiche non hai nemmeno bisogno di elencare i nomi delle colonne. Molto utile per archiviare una copia statica di sola lettura di una tabella per i record che potrebbero cambiare in seguito. –

3

È possibile utilizzare OLD e NEW nel trigger per accedere ai valori che sono stati modificati in tale trigger. Mysql Ref

+3

Egli _did_ specifica MS SQL, non MySql – Oded

+3

Non l'ha fatto quando Teja ha pubblicato la risposta. Per non parlare, non fa mai male conoscere metodi analoghi per altri sistemi. – cmsjr

+0

Era MS Sql, è stato modificato su SQL Server, come cmsjr ha detto ... non fa male. – jim

4

Quando ci si trova nel contesto di un trigger, si ha accesso alla tabella logica INSERTED che contiene tutte le righe appena inserite nella tabella. È possibile creare il proprio inserimento nell'altra tabella in base a una selezione da Inserisci.

12

Si utilizza un trigger di inserimento: all'interno del trigger, gli elementi di riga inseriti verranno esposti come una tabella logica INSERTED, che ha lo stesso layout di colonna della tabella su cui è definito il trigger.

I trigger di eliminazione hanno accesso a una tabella logica simile denominata DELETED.

I trigger di aggiornamento hanno accesso sia a una tabella INSERTED che contiene i valori aggiornati che a una tabella DELETED che contiene i valori da aggiornare.

5

In un trigger di SQL Server sono disponibili due psdeuotables chiamati inseriti ed eliminati. Questi contengono i vecchi e nuovi valori del record.

Così all'interno del trigger (è possibile cercare le parti CREATE TRIGGER facilmente) si farebbe qualcosa di simile:

Insert table2 (user_id, user_name) 
select user_id, user_name from inserted i 
left join table2 t on i.user_id = t.userid 
where t.user_id is null 

Quando la scrittura trigger ricordate che agiscono una volta su tutto il lotto di informazioni, non lo fanno processo fila per fila. Quindi conta per inserire più righe nel codice.

+2

Nota una differenza tra ciò che mostro e ciò che KM mostra è che ti ho dato il codice per assicurarmi che il record non esistesse già nella tabella 2. Lei/lui mostra come gestire gli altri campi richiesti oltre a quelli che hai a disposizione nel inserire se ce ne sono. – HLGEM

+0

ok, grazie per i chiarimenti. Apprezzo il tuo tempo. – jim