щеголеватый. Выполнение запроса с помощью GO

Я пытаюсь использовать Dapper для запуска SQL-запроса:

use master
go

if exists (select name from sys.databases where name = N'TestDB')
drop database [TestDB]
go

create database [TestDB] on primary ( 
  name = 'TestDB_Data',
  filename = '$Path\TestDB_Data.mdf',
  size = 40MB,
  maxsize = 2GB,
  filegrowth = 20MB 
)

use [TestDB]
go

create table dbo.Posts
(
  Id int identity not null,
  Body nvarchar (max) null
);

Я использую Dapper следующим образом:

using (SqlConnection connection = new SqlConnection(connectionString)) {
  connection.Open();
  connection.Execute(sqlQuery);
}

Однако я получаю сообщение об ошибке при использовании GO.

Но если я удаляю операторы GO, я получаю сообщение об ошибке при создании сообщений, потому что таблица TestDB не была создана.

Есть ли способ использовать Dapper для решения этой проблемы?

Я смог сделать это только с помощью SQL Server SDK.


person Miguel Moura    schedule 20.08.2012    source источник
comment
GO не является оператором T-SQL, это директива, интерпретируемая только некоторыми утилитами SQL Server. msdn.microsoft.com/en-us/library/ms188037.aspx   -  person Pero P.    schedule 20.08.2012


Ответы (3)


Dapper не может помочь вам здесь. Вместо этого я бы посоветовал вам попробовать объекты управления SQL Server для выполнения больших команд SQL, подобных той, которую вы упомянули. И он поддерживает операторы GO.

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

person Void Ray    schedule 20.08.2012

GO — это не оператор SQL, это просто разделитель пакетов, на самом деле вы можете переименовать его как хотите.

разделитель пакетов

Способ, которым Management Studio определяет это, заключается в анализе SQL. Легко написать тривиальный синтаксический анализатор, который может разбивать операторы на части. Просто разделите строку на «GO» и отправьте каждое утверждение в Dapper.

Однако, чтобы быть на 100% правильным, вам нужен сложный синтаксический анализатор.

select '
GO ' GO from [GO] 
person Sam Saffron    schedule 21.08.2012

Я решил разделить казни

 using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            foreach (var item in sqlQuery.Split("GO"))
            {
                conn.Execute(item);
            }
        }
person Everson Rafael    schedule 23.02.2021