Ich arbeite an einem Auslöser, der seine Daten in einer anderen Tabelle neu einfügen muss.Triggers auf TSQL, das eine Nicht-Identitätstabelle einfügt
Die Zieltabelle hat einen Primärschlüssel INT NOT NULL ohne Identität, so dass ich die Wahl zwischen 2:
- den maximalen Berechnen und von hier einfügen.
- Maximalwert aus einer Sequenztabelle nehmen.
Ich verwende immer eine Tabellenvariable mit Identität erstellen und Verschiebung von dem zuvor berechneten Wert einfügen.
CREATE TRIGGER trg
ON [dbo].[table]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @t TABLE (sec INT IDENTITY(1, 1), id INT)
DECLARE @ini INT
SELECT @ini = ISNULL(MAX(id), 0) FROM tableDest
-- SELECT @ini = value FROM sequencesTable WHERE seqId = 987
INSERT INTO @t (id) SELECT id FROM inserted
INSERT INTO tableDest
(id, field1, field2)
SELECT @ini + t.sec, field1, field2
FROM @t t
JOIN inserted ON t.id = inserted.id
-- SELECT @ini = @ini + MAX(t.sec) FROM @t
-- UPDATE sequencesTable SET value = @ini WHERE seqId = 987
END
Ist es eine bessere Möglichkeit, dies zu tun?
Vielen Dank im Voraus.
Sie müssen bestimmen, was die Absicht und Bedeutung dieser int PK in der anderen Tabelle ist. Nur so können Sie sicher sein, dass Sie den richtigen Schlüsselwert erhalten. – RBarryYoung