我創建了一個觸發插入SQL觸發器不工作的更新同桌
ALTER TRIGGER [dbo].[UpdateClientNumber]
ON [dbo].[APP_Clients]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @Count bigint
DECLARE @ClientNumber nchar(15)
SELECT @Count = COUNT(*) FROM [dbo].[APP_Clients]
IF @Count = 0
BEGIN
SET @ClientNumber = CONVERT(nchar(4), YEAR(GETDATE())) + '01' + '0001'
UPDATE [dbo].[APP_Clients]
SET [ClientNumber] = @ClientNumber
FROM inserted i
LEFT JOIN [dbo].[APP_Clients] j ON i.ID = j.ID
END
ELSE
BEGIN
SELECT @ClientNumber = MAX(SUBSTRING([ClientNumber], 7, len([ClientNumber]) - 0))
FROM [dbo].[APP_Clients]
WHERE (SUBSTRING([ClientNumber], 1, len([ClientNumber]) - 6) = YEAR(GETDATE()))
SET @ClientNumber = CONVERT(bigint, @ClientNumber) + 1
SET @ClientNumber = CONVERT(nchar(4), YEAR(GETDATE())) + '01' + @ClientNumber
UPDATE [dbo].[APP_Clients]
SET [ClientNumber] = @ClientNumber
FROM inserted i
LEFT JOIN [dbo].[APP_Clients] j ON i.ID = j.ID
END
END
爲表[DBO]之後。[APP_Clients]的柱子插入ClientNumber後
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[ClientName] [nvarchar](100) NULL,
[ClientNumber] [nchar](15) NULL,
[ClientGSM1] [nvarchar](50) NULL,
[ClientGSM2] [nvarchar](50) NULL,
[ClientEmail] [nchar](50) NULL,
[ClientOccupation] [nvarchar](50) NULL,
[ClientWorkPlace] [nvarchar](100) NULL
不更新。
與問候,穆罕默德
好,觸發器被破壞的一種方式是假定它只能用於單行。這通常不是一個安全的假設。 –
謝謝,所以我需要執行這個SQL是要完成存儲過程? – Mohammed