Скрипт SQL с транзакцией / откатом с оператором «Go» - PullRequest
0 голосов
/ 29 января 2019

Я создаю настольное приложение.с пользователем выберите файл .sql и запустите его с Transaction / Rollback.

, в этом случае я прочитал весь контекст из файла sql.и поместите между следующим кодом для замены сценария файла SQL на ***** $ Замените текст $ *****.

Как я могу обработать транзакцию / откат, если файл SQL содержит пакет «GO».его ошибка броска.

любое решение для этого типа сценария для любого файла sql, преобразованного в транзакцию / откат.

Примечание: без изменений в сценарии файла sql.


файл sqlсценарий:

INSERT INTO [dbo].[User] ([Name]  ,[ContectNo])  VALUES ('m3','33')
    GO BEGIN TRANSACTION
    INSERT INTO [dbo].[User] ([Name]  ,[ContectNo])  VALUES ('m3',null)
    GO BEGIN TRANSACTION
    INSERT INTO [dbo].[User] ([Name]  ,[ContectNo])  VALUES ('m3','99')
    GO
-----------------------------------------------------
Transaction block: replace sql file query from *****$Replace$*****
-----------------------------------------------------


SET XACT_ABORT ON;  
GO    
BEGIN TRY
    BEGIN TRANSACTION

       *****$Replace$*****

    COMMIT TRANSACTION;

END TRY 
BEGIN CATCH  

      IF @@ERROR > 0
     BEGIN
          ROLLBACK TRANSACTION

          DECLARE @ErrorMessage NVARCHAR(max) = ERROR_MESSAGE()
          DECLARE @ErrorSeverity INT = ERROR_SEVERITY()
          DECLARE @ErrorState INT = ERROR_STATE()
          DECLARE @ErrorLine INT = ERROR_LINE()

          RAISERROR (@ErrorMessage,
                       @ErrorSeverity,
                       @ErrorState 
                      );  
     END
END CATCH
SET XACT_ABORT OFF

1 Ответ

0 голосов
/ 29 января 2019

Вы получаете сообщение об ошибке, потому что GO не является командой, которая должна быть отправлена ​​ядру SQL Server.Это то, что распознают такие инструменты, как SSMS, sqlcmd и osql.Он сигнализирует об окончании пакета операторов T-SQL и служит сигналом того, что пока команды (текущий пакет) должны быть отправлены в механизм SQL Server.

Не следует пытаться выполнить GO заявления как T-SQL.Вам следует либо попытаться проанализировать файл на GO строк, разделить его на отдельные пакеты и выполнить их один за другим, либо убедиться, что в эти файлы передается допустимое содержимое T-SQL.

Вы можетесм. дополнительную информацию об операторе GO в Заявлениях утилит SQL Server - GO article.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...