Sql server SQL触发器-如何在更新另一个数据库中的另一个表时更新该表?
所以我在数据库test1中有一个名为“persons”的表:Sql server SQL触发器-如何在更新另一个数据库中的另一个表时更新该表?,sql-server,sql-server-2008,Sql Server,Sql Server 2008,所以我在数据库test1中有一个名为“persons”的表: 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] [var
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中名为“Users”的表:
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]
我要做的是创建一个触发器,如果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无论如何都不应该改变。您根本不需要任何变量,只需简单的更新就足够了
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
你根本不需要任何变量,只要简单的更新就足够了
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
我相信我看到了,这并没有解决我的问题。我一直收到这样一个错误:更新和删除的行值要么不使行唯一,要么改变了多行,这两个表中的PK都是唯一的,而且PK无论如何都不应该被改变。我相信我看到了可能的重复,这并没有解决我的问题。我一直收到这样一个错误:更新和删除的行值要么不使行唯一,要么改变多行,这两个表中的PK都是唯一的,PK无论如何都不应该改变。