Я раньше не использовал триггеры, но они кажутся способ решить эту проблему.SQL Trigger для сохранения другой таблицы в актуальном состоянии
Я хочу иметь таблицу, которая имеет до даты записей из двух таблиц: Item_Master
и Dev_Master
->Union_Master
Главным, я не понимание является вставленными и удаленными таблицами «». Если я хочу обновить одну строку (при обновлении строки), как мне получить доступ к столбцам вставленных таблиц?
Вот то, что я до сих пор:
ALTER TRIGGER [dbo].[DevMasterChangeTrigger]
ON [dbo].[DEV_MASTER]
AFTER INSERT, UPDATE, DELETE
AS
DECLARE @UpdateType nvarchar(1)
DECLARE @UpdatedDT datetime
SELECT @UpdatedDT = CURRENT_TIMESTAMP
SET NOCOUNT ON;
IF EXISTS (SELECT * FROM inserted)
IF EXISTS (SELECT * FROM deleted)
SELECT @UpdateType = 'U' -- Update Trigger
ELSE
SELECT @UpdateType = 'I' -- Insert Trigger
ELSE
IF EXISTS (SELECT * FROM deleted)
SELECT @UpdateType = 'D' -- Delete Trigger
ELSE
SELECT @UpdateType = NULL; -- Unknown Operation
IF @UpdateType = 'I'
BEGIN
PRINT 'Insert'
END
IF @UpdateType = 'U'
BEGIN
UPDATE dbo.UNION_MASTER
SET PRDNO = inserted.PRDNO & 'abc'
WHERE dbo.DEV_MASTER.PRDNO = inserted.PRDNO
END
IF @UpdateType = 'D'
BEGIN
PRINT 'Delete'
END
Кроме того, любые хорошие книги по погружая самого себя в MS SQL Server?
Редактировать: ok, для всех, кто наткнулся на этот пост, я понял это. Надеюсь, я не пропустил никаких нюансов, которые вызывают проблемы. Удаления части это немного для меня загадка ...
USE [abc]
GO
/****** Object: Trigger [dbo].[DevMasterChangeTrigger] Script Date: 10/04/15 12:43:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[DevMasterChangeTrigger]
ON [dbo].[DEV_MASTER]
AFTER INSERT, UPDATE, DELETE
AS
DECLARE @UpdateType nvarchar(1)
DECLARE @UpdatedDT datetime
SELECT @UpdatedDT = CURRENT_TIMESTAMP
IF EXISTS (SELECT * FROM inserted)
IF EXISTS (SELECT * FROM deleted)
SELECT @UpdateType = 'U' -- Update Trigger
ELSE
SELECT @UpdateType = 'I' -- Insert Trigger
ELSE
IF EXISTS (SELECT * FROM deleted)
SELECT @UpdateType = 'D' -- Delete Trigger
ELSE
SELECT @UpdateType = NULL; -- Unknown Operation
IF @UpdateType = 'I'
BEGIN
INSERT INTO [UNION_MASTER]
(PRDID, {Insert various fields here})
SELECT [inserted].[PRDID], [inserted].{Insert various fields here}
FROM inserted
END
IF @UpdateType = 'U'
BEGIN
UPDATE [UNION_MASTER]
SET
[UNION_MASTER].[abcdfield]=[inserted].[abcdfield], {other fields here}
FROM inserted
WHERE [UNION_MASTER].[PRDNO]=inserted.prdno
END
IF @UpdateType = 'D'
BEGIN
declare @prdno varchar(50)
SELECT @prdno= PRDNO FROM deleted
DELETE
FROM UNION_MASTER
WHERE PRDNO = @prdno
END
для книги: попробовать 'Training Kit (экзамен 70-461): Запрос Microsoft SQL Server 2012' , который охватывает почти все :) –