Dapper. Abfrage mit GOs ausführen

dapper sql

Frage

Ich versuche, Dapper zu verwenden, um eine SQL-Abfrage auszuführen:

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
);

Ich benutze Dapper wie folgt:

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

Allerdings bekomme ich einen Fehler bei der Verwendung von GO.

Aber wenn ich die GO-Anweisungen entferne, erhalte ich einen Fehler beim Erstellen von Posts, weil die Tabelle TestDB nicht erstellt wurde.

Gibt es eine Möglichkeit, Dapper zu benutzen, um das zu lösen?

Ich konnte dies nur mit SQL Server SDK tun.

Akzeptierte Antwort

Dapper kann dir hier nicht helfen. Stattdessen würde ich vorschlagen, dass Sie SQL Server-Verwaltungsobjekte ausführen, um große SQL-Befehle wie den von Ihnen erwähnten auszuführen. Und es unterstützt GO-Anweisungen.

In diesem Blogbeitrag finden Sie eine Schritt-für-Schritt-Anleitung.


Beliebte Antwort

GO ist keine SQL-Anweisung, es ist lediglich ein Batch-Trennzeichen, tatsächlich können Sie es umbenennen, was Sie wollen.

Batch-Separator

Die Art, wie Management Studio dies herausfindet, besteht darin, das SQL zu analysieren. Es ist einfach, einen trivialen Parser zu schreiben, der die Anweisungen aufteilen kann. Teilen Sie die Zeichenfolge einfach auf "GO" und senden Sie jede Anweisung an Dapper.

Um 100% korrekt zu sein, benötigen Sie jedoch einen ausgefeilten Parser .

select '
GO ' GO from [GO] 


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow