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不应该改变。
的可能的复制[如何使用触发更新来更新另一个表?](http://stackoverflow.com/questions/5252802/how-to-use-update-trigger-to-update-another-表) –
我相信我看到了,它并没有解决我的问题。我不断收到一个错误,说:更新和删除的行值不会使行是唯一的或他们改变多行,这两个表中的PK都是唯一的,PK不应该改变。 –