Tôi đang gặp một số sự cố khi cố gắng giải quyết Trình kích hoạt SQL để tự động đặt người dùng bị chặn & tạo bản ghi khối bao gồm ngày trong bảng khác, nếu Ngày đến hạn của họ bằng với ngày đã đặt.T-SQL Chèn Trình kích hoạt để chèn, cập nhật nếu điều kiện trên nhiều bảng
Vấn đề là khi trình kích hoạt được đặt bằng chèn, các câu lệnh in được thực thi và chèn sẽ xảy ra, nhưng chèn vào bảng không, hoặc câu lệnh cập nhật? Bất cứ ai có thể giải thích lý do tại sao?
Lưu ý: Cả lệnh chèn và câu lệnh Cập nhật đều ổn khi được thực thi bởi chính chúng.
TÀI KHOẢN TABLE
CREATE TABLE [dbo].[Account](
[AccountNo] [int] IDENTITY(1,1) NOT NULL,
[CustomerNo] [int] NOT NULL,
[PaymentNo] [int] NULL,
[CreditNo] [int] NULL,
[BlockID] [dbo].[number] NULL,
[Balence] [dbo].[currency] NOT NULL,
[AmountDue] [dbo].[currency] NOT NULL,
[DueDate] [dbo].[dates] NULL,
[AutherisedBy] [nvarchar](50) NOT NULL,
[DateCreated] [date] NOT NULL,
BLOCKEDUSER TABLE
CREATE TABLE [dbo].[BlockedUsers](
[BlockID] [int] IDENTITY(1,1) NOT NULL,
[DateEnforced] [dbo].[dates] NOT NULL,
[Blocked] [dbo].[switch] NOT NULL,
TRIGGER
ALTER TRIGGER [dbo].[Add_Blocked_User]
ON [dbo].[Account]
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
Declare @ID int
Select @ID = [AccountNo] from inserted
If(Select [DueDate] from inserted) = '2011-01-01'
INSERT INTO dbo.BlockedUsers(DateEnforced,Blocked)
VALUES (GETDATE(),1)
PRINT 'New Block Date Added'
UPDATE Account
Set BlockID = IDENT_CURRENT('BlockID')
where @ID = @ID
PRINT 'Account Blocked'
END
GO
Hoàn toàn làm việc Ví dụ: Hoàn sử dụng Trợ giúp Dưới đây.
ALTER TRIGGER [dbo].[Add_Blocked_User]
ON [dbo].[Account]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
Declare @ID int
Select @ID = [AccountNo] from inserted
If(Select [DueDate] from inserted)Not Between (select CONVERT(date, getdate() - 30)) And (select CONVERT(date, getdate()))
Begin
INSERT INTO dbo.BlockedUsers(DateEnforced,Blocked)
VALUES (GETDATE(),1)
PRINT 'New Block Date Added'
UPDATE Account
Set BlockID = (Select Max(BlockID) From BlockedUsers)
where [AccountNo] = (Select [AccountNo] from inserted)
PRINT 'Account Blocked'
End
END
GO
kích hoạt của bạn sẽ phá vỡ khi hai hoặc nhiều hàng được chèn với một tuyên bố duy nhất. –