我正在尝试使用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执行此操作。
答案 0 :(得分:7)
GO不是SQL语句,它只是一个批处理分隔符,实际上你可以将它重命名为你想要的任何东西。
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);
}
}