Проблемы Создание триггеров SQL Server с помощью SQuirreL SQL Client

Недавно я работал с базой данных SQL Server и пытался создать несколько триггеров для некоторых таблиц с помощью SQuirreL SQL Client, и по какой-то причине мне не удалось избавиться от следующего надоедливого сообщения об ошибке:

«Ошибка:« CREATE TRIGGER »должен быть первым оператором в пакете запросов. SQLState: S0001 ErrorCode: 111"

Запрос, который я пытался выполнить, был следующим (я начал с очень простого триггера, чтобы убедиться, что синтаксис правильный):

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

Когда я попытался выполнить точно такой же запрос в Microsoft SQL Server Management Studio Express, он выполнился нормально. У меня такой вопрос: кто-нибудь еще сталкивался с подобными проблемами при использовании SQuirreL SQL Client, и если да, то что вы сделали, чтобы избавиться от этой ошибки?

РЕДАКТИРОВАТЬ:

Я использую SQuirrel SQL v2.6.8 с драйвером JDBC Microsoft SQL Server 2.0 и подключаюсь к SQL Server 2005.


person BordrGuy108    schedule 28.05.2009    source источник
comment
Не то чтобы это отвечало на ваш вопрос, но SQuirrel SQL не так хорош, как Quest Toad (также имеет бесплатную версию) IMO. Вы можете дать ему трещину, чтобы спасти головную боль! toadsoft.com/toadsqlserver/toad_sqlserver.htm   -  person Aaron Alton    schedule 28.05.2009
comment
Какая версия SQuirreL? Какой jdbc драйвер?   -  person Ed Harper    schedule 28.05.2009


Ответы (3)


У меня была такая же проблема. Погуглив немного, я нашел эту статью:

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

Короче говоря, оберните exec('') вокруг оператора триггера создания. Кроме того, любые одинарные кавычки (') в операторе триггера должны быть заменены двойными одинарными кавычками ('').

person Community    schedule 04.06.2009
comment
Потрясающий. Большое спасибо за ваш ответ и точное резюме (все сработало, как вы сказали). - person BordrGuy108; 09.06.2009

Обычно вы получаете эту ошибку при попытке запустить несколько инструкций в одном пакете, которым не разрешено быть ничем, кроме первого оператора в пакете. Вам может понадобиться GO между ними. GO — это не команда SQL, а на самом деле директива для клиентского инструмента для разделения пакетов команд.

person Cade Roux    schedule 28.05.2009
comment
Я читал об этом, когда впервые получил описанное сообщение об ошибке, но поскольку запрос, который я пытался выполнить, был буквально тем же запросом, который я разместил выше, разве он не должен выполняться нормально, поскольку оператор CREATE TRIGGER является первым (и единственным) оператором. в партии? - person BordrGuy108; 28.05.2009
comment
Я думаю, что SQuirrelSQL сначала помещает что-то еще в пакет. Используйте SQL Profiler, чтобы увидеть, что он на самом деле отправляет. А затем посмотрите, можете ли вы отключить это в SQuirrel SQL или отправить отчет об ошибке. - person Cade Roux; 28.05.2009

Я не смог воспроизвести это на SQuirrel SQL v2.6.8, используя v1.2.2 драйвер jTDS jbdc для SQL. 2005 SP3 (версия для разработчиков).

person Ed Harper    schedule 28.05.2009
comment
Интересный. Я также использую SQuirrel SQL v2.6.8 и SQL Server 2005, но вместо упомянутого вами драйвера я использую драйвер Microsoft SQL Server JDBC Driver 2.0. Может водитель виноват? - person BordrGuy108; 28.05.2009