2009-11-25 4 views
1

J'ai une table dans ma base de données qui sert essentiellement de destination d'enregistrement. Je l'utilise avec suivant modèle de code dans mon code SQL:Données INSERT ignorant la transaction en cours

BEGIN TRY 
    ... 
END TRY 
BEGIN CATCH 
    INSERT INTO [dbo.errors] (...) 
    VALUES (ERROR_PROCEDURE(), ERROR_NUMBER(), ERROR_MESSAGE(), ...) 
END CATCH 

Pour faire longue histoire courte partie de ce code doit être exécutaient withing une transaction. Je me rends compte que rien n'est écrit dans le journal, car la restauration de la transaction va également annuler les entrées du journal des erreurs. Tout peut être fait à ce sujet?

EDIT: Je sais comment contourner en effectuant un rollback/commit avant un INSERT pour se connecter. Ma question était la suivante: existe-t-il un moyen connu d'insérer des données afin qu'elles ne soient pas affectées par une transaction en cours? Par exemple: cela pourrait être fait si je l'insère en utilisant une connexion séparée. Seulement, je voulais trouver le moyen de le faire dans une instruction SQL unique

EDIT2: Précision: ceci est sur Microsoft SQL

Répondre

1

Si vous voulez vraiment éviter d'utiliser des transactions, here's une technique que vous pourriez essayer. C'est une variation sur une variable locale.

0

Dans le bloc de transactions CATCH se comportent d'une manière spéciale. Vous êtes censé toujours vérifier XACT_STATE(). Si la transaction est condamnée (état -1), vous ne serez autorisé à effectuer aucune opération d'écriture, comme insérer dans une table de journal.

-1

Je ne sais pas quelle base de données vous utilisez, mais en MySQL (je pense) vous pouvez simplement utiliser une table qui ne supporte pas les transactions (MyISAM). Étant donné que la table ne prend pas en charge les transactions, elle n'enregistre que les informations à la volée.

+0

non ... Microsoft SQL – galets

+0

@Justin Savage suffit de jeter un oeil a les étiquettes ci-dessous la question pour plus de détails – sra

Questions connexes