T-SQL Déclencheur d'Insertion pour insérer,mettre à jour sur si la condition sur plusieurs tables

Je vais avoir quelques problèmes en essayant de résoudre un Déclencheur SQL pour définir automatiquement un utilisateur bloqué & créer le bloc d'enregistrement, y compris la date dans un autre tableau, si la date d'Échéance est égale à une date fixée.

Le problème est que lorsque la gâchette est actionnée par un insert, l'impression de l'exécution des instructions et de l'insertion se produit, mais l'insertion dans la table n'est pas, ou l'instruction de mise à jour ? Quelqu'un peut-il expliquer pourquoi ?

Remarque: à la Fois l'insertion et de l'instruction de mise à Jour sont très bien lorsqu'il est exécuté par eux-mêmes.

TABLE COMPTE

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,

DÉCLENCHER

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

Pleinement de Travail Exemple : Réalisé à l'aide de l'Aide ci-Dessous.

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
Votre détente pause lorsque deux ou plusieurs lignes s'insérés avec une seule instruction.

OriginalL'auteur Baggerz | 2012-12-15