2009-05-28 6 views
0

Récemment, j'ai travaillé avec une base de données SQL Server et j'essayais de créer des déclencheurs pour certaines tables à l'aide de SQuirreL SQL Client et pour une raison inconnue message d'erreur satanés:Problèmes Création de déclencheurs SQL Server à l'aide de SQuirreL SQL Client

"erreur: 'CREATE TRIGGER' doit être la première instruction dans un lot de requête SQLState:. S0001 ErrorCode: 111"

la requête que je tentais d'exécuter est la suivante (I commencé avec un déclencheur vraiment simple pour s'assurer que la syntaxe était correcte):

CREATE TRIGGER meeting_overlap on adhoc_meeting 
FOR INSERT 
AS 
DECLARE 
    @myvar INT 

Lorsque j'ai tenté d'exécuter exactement ma même requête dans Microsoft SQL Server Management Studio Express, il s'est exécuté correctement. Ma question est: quelqu'un d'autre a rencontré des problèmes similaires en utilisant SQuirreL SQL Client et si oui, qu'avez-vous fait pour se débarrasser de cette erreur?

EDIT:

J'utilise Écureuil v2.6.8 SQL avec le pilote JDBC Microsoft SQL Server 2.0 et je suis connecté à SQL Server 2005.

+0

Pas que cela répond à votre question, mais SQuirrel SQL n'est pas aussi bon que Quest Toad (a également une version freeware) IMO. Vous voudrez peut-être faire une pause pour sauver le mal de tête! http://www.toadsoft.com/toadsqlserver/toad_sqlserver.htm –

+0

Quelle version de SQuirreL? Quel pilote jdbc? –

Répondre

2

J'avais le même problème. Après quelques recherches sur Google, je trouve cet article:

http://vsingleton.blogspot.com/2009/04/error-create-view-must-be-first.html

En bref, wrap exec ('') autour de votre create de déclenchement. De plus, les guillemets simples (') que vous avez dans l'instruction trigger doivent être changés en guillemets simples doubles (' ').

+0

Génial. Merci beaucoup pour votre réponse et le résumé précis (cela a fonctionné comme vous l'avez dit). – BordrGuy108

0

Habituellement, vous obtenez cette erreur lors d'une tentative d'exécuter plusieurs déclarations dans le même lot qui ne peut être autre chose que la première déclaration d'un lot. Vous pouvez avoir besoin d'un GO entre eux. GO n'est pas une commande SQL mais really a directive à l'outil client pour séparer les lots de commandes.

+0

J'ai lu à ce sujet quand j'ai reçu le message d'erreur décrit, mais comme la requête que j'essayais d'exécuter était juste la requête que j'ai posté ci-dessus, ne devrait pas s'exécuter correctement car l'instruction CREATE TRIGGER est la première déclaration dans le lot? – BordrGuy108

+0

Je pense que SQuirrelSQL met d'abord quelque chose d'autre dans le lot. Utilisez le profileur SQL pour voir ce qu'il envoie réellement. Et puis voir si vous pouvez le désactiver dans SQuirrel SQL ou soumettre un rapport de bogue. –

0

Je ne pouvais pas répliquer cela sur SQuirrel SQL v2.6.8 en utilisant v1.2.2 du jTDS jbdc driver contre SQL 2005 SP3 (édition développeur).

+0

Intéressant. J'utilise également SQuirrel SQL v2.6.8 et SQL Server 2005, mais au lieu du pilote que vous avez mentionné, j'utilise Microsoft SQL Server JDBC Driver 2.0. Peut-être que le conducteur est à blâmer? – BordrGuy108

Questions connexes