Apuesto. Ejecutar consulta con GOs

dapper sql

Pregunta

Estoy tratando de usar Dapper para ejecutar una consulta 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
);

Estoy usando Dapper de la siguiente manera:

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

Sin embargo, me sale un error al usar GO.

Pero si elimino las declaraciones GO, aparece un error al crear Publicaciones porque la tabla TestDB no se creó.

¿Hay alguna manera de usar Dapper para resolver esto?

Pude hacer esto solo con SQL Server SDK.

Respuesta aceptada

Dapper no puede ayudarte aquí. En su lugar, le sugiero que pruebe los objetos de administración de SQL Server para ejecutar comandos SQL grandes como el que mencionó. Y admite declaraciones GO.

Puede consultar esta publicación de blog para obtener instrucciones paso a paso.


Respuesta popular

GO no es una declaración SQL, es simplemente un separador de lotes, de hecho, podría cambiarle el nombre a lo que desee.

separador de lotes

La forma en que Management Studio lo resuelve es mediante el análisis del SQL. Es fácil escribir un analizador trivial que pueda dividir las declaraciones. Simplemente divida la cadena en "IR" y envíe cada instrucción a Dapper.

Sin embargo, para ser 100% correcto necesitas un analizador sofisticado .

select '
GO ' GO from [GO] 


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué