【发布时间】:2019-05-06 01:16:16
【问题描述】:
考虑下表。我使用触发器添加到表中。在数字转字符串那一栏,失败了。
CREATE TABLE [dbo].[tblAIAgent]
(
[AgentCode] [NVARCHAR](10) NOT NULL,
[NationalCode] [BIGINT] NOT NULL
CONSTRAINT [DF_tblAIAgent_NationalCode] DEFAULT ((0)),
[FirstName] [NVARCHAR](50) NOT NULL
CONSTRAINT [DF_tblAIAgent_Name] DEFAULT (''),
[LastName] [NVARCHAR](50) NOT NULL
CONSTRAINT [DF_tblAIAgent_Family] DEFAULT (''),
[IsActive] [BIT] NOT NULL
CONSTRAINT [DF_tblAIAgent_Active] DEFAULT ((1)),
[Counter] [INT] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_tblAIAgent]
PRIMARY KEY CLUSTERED
)
ALTER TRIGGER [dbo].[AgentInsert]
ON [dbo].[tblAIAgent]
INSTEAD OF INSERT
AS
BEGIN
DECLARE @AgentCode NVARCHAR(10)
DECLARE @NationalCode BIGINT
DECLARE @FirstName NVARCHAR(50)
DECLARE @LastName NVARCHAR(50)
DECLARE @IsActive BIT
DECLARE @CounterIs INT
SET @CounterIs = @@IDENTITY
SELECT
@AgentCode = AgentCode,
@NationalCode = NationalCode,
@FirstName = FirstName,
@LastName = LastName,
@IsActive = IsActive
FROM inserted
INSERT INTO tblAIAgent (NationalCode, FirstName, LastName, IsActive, AgentCode)
VALUES (@NationalCode, @FirstName, @LastName, @IsActive, 'Agent_' + CAST(@CounterIs AS NVARCHAR(4)))
END
【问题讨论】:
-
@@IDENTITY在插入 after 之前没有值 - 所以在你的例子中它将是null...所以如果你想这样做方式,这似乎过于复杂,您必须在插入之后将AgentCode更新为单独的语句。为什么不只使用计算列?无论如何,你想用这个触发器来完成什么?它似乎没有做任何事情?而且它坏了,你不能假设inserted表中只有一条记录。
标签: sql sql-server tsql triggers calculated-columns