9

我正在尝试使用 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 语句,我会在创建 Posts 时收到错误,因为未创建表 TestDB。

有没有办法使用 Dapper 来解决这个问题?

我只能使用 SQL Server SDK 来做到这一点。

4

3 回答 3

10

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

批处理分隔符

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

但是,要 100% 正确,您需要一个复杂的解析器

select '
GO ' GO from [GO] 
于 2012-08-21T23:22:14.820 回答
4

Dapper 在这里无法为您提供帮助。相反,我建议您尝试使用 SQL Server 管理对象来执行您提到的大型 SQL 命令。它确实支持 GO 语句。

您可以查看此博客文章以获取分步说明。

于 2012-08-20T02:09:05.740 回答
2

我解决了分离处决

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

            foreach (var item in sqlQuery.Split("GO"))
            {
                conn.Execute(item);
            }
        }
于 2021-02-23T17:44:22.410 回答