小巧玲珑。使用GO执行查询

时间:2012-08-20 00:47:07

标签: sql dapper

我正在尝试使用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执行此操作。

3 个答案:

答案 0 :(得分:7)

GO不是SQL语句,它只是一个批处理分隔符,实际上你可以将它重命名为你想要的任何东西。

batch seperator

Management Studio解决这个问题的方法是解析SQL。编写一个可以将语句组合起来的简单解析器很容易。只需将字符串拆分为“GO”并将每个语句发送给Dapper。

但是,为了100%正确,您需要sophisticated parser

select '
GO ' GO from [GO] 

答案 1 :(得分:4)

Dapper在这里帮不了你。相反,我建议你尝试SQL Server管理对象来执行像你提到的那样的大SQL命令。它确实支持GO语句。

您可以查看此blog post以获取分步说明。

答案 2 :(得分:2)

我解决了分离执行

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

            foreach (var item in sqlQuery.Split("GO"))
            {
                conn.Execute(item);
            }
        }