2015-10-01 157 views
1

所以我叫表「人」在數據庫TEST1:SQL觸發器 - 每當另一個數據庫中的另一個表正在更新時如何更新表?

CREATE TABLE [dbo].[persons](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [LastName] [varchar](50) NULL, 
    [FirstName] [varchar](50) NULL, 
    [Job] [varchar](50) NULL, 
    [Extension] [char](10) NULL, 
    [EMail] [varchar](50) NULL, 
    [Dept] [int] NULL, 
    [MobileNumber] [char](10) NULL, 
    [District] [int] NULL, 
    [Status] [varchar](50) NULL, 
    [InOutStatus] [varchar](5) NULL, 
    [InOutDescr] [varchar](50) NULL, 
    [InOutDirections] [varchar](255) NULL, 
    [InOutReturn] [varchar](50) NULL, 
    [login] [varchar](50) NULL, 
    [StatusExpiry] [datetime] NULL 
) ON [PRIMARY] 

和被稱爲「用戶」在數據庫TEST2表:

CREATE TABLE [dbo].[Users](
    [User_ID] [int] NOT NULL, 
    [Firstname] [nvarchar](50) NULL, 
    [Lastname] [nvarchar](50) NULL, 
    [Username] [nvarchar](50) NULL, 
    [Status] [nvarchar](50) NULL 
) ON [PRIMARY] 

我試圖做的是創建一個Trigger,其中如果更新了persons表中的FirstName,LastName,login和/或Status列,則在Users表的相同列中更新相同的值。這是我想出了一個觸發器,但它不工作:

ALTER TRIGGER [dbo].[UserUpdteTrig] 
    ON [dbo].[persons] 
    AFTER UPDATE 
AS 
BEGIN 
    DECLARE @uid int; 
    DECLARE @fname nvarchar(50); 
    DECLARE @lname nvarchar(50); 
    DECLARE @uname nvarchar(50); 
    DECLARE @stat nvarchar(50); 


    SELECT @fname = i.FirstName, @lname = i.LastName, @uname = i.login, @stat = i.Status 
    FROM inserted i 

    UPDATE [test2].[dbo].[Users] 
    SET Firstname = @fname , Lastname = @lname, Username = @uname, Status = @stat 
    FROM [test2].[dbo].[Users] u INNER JOIN inserted i ON u.User_ID = i.ID 

END 

我不斷收到一個錯誤,指出:該行值更新或刪除或者不要使行唯一或他們更改多個行,其中兩個表中的PK都是獨一無二的,PK不應該改變。

+0

的可能的複製[如何使用觸發更新來更新另一個表?](http://stackoverflow.com/questions/5252802/how-to-use-update-trigger-to-update-another-表) –

+0

我相信我看到了,它並沒有解決我的問題。我不斷收到一個錯誤,說:更新和刪除的行值不會使行是唯一的或他們改變多行,這兩個表中的PK都是唯一的,PK不應該改變。 –

回答

0

你根本不需要任何變量只是簡單的更新就足夠了。

ALTER TRIGGER [dbo].[UserUpdteTrig] 
    ON [dbo].[persons] 
    AFTER UPDATE 
AS 
BEGIN 
SET NOCOUNT ON; 

    UPDATE u 
    SET u.Firstname = i.FirstName 
     , u.Lastname = i.Lastname 
     , u.Username = i.Username 
     , u.[Status] = i.[Status] 
    FROM [test2].[dbo].[Users] u 
    INNER JOIN inserted i ON u.[User_ID] = i.ID 


END 
+0

非常感謝! –

相關問題