Pimpant. Exécuter une requête avec GOs

dapper sql

Question

J'essaie d'utiliser Dapper pour exécuter une requête 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
);

J'utilise Dapper comme suit:

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

Cependant, j'obtiens une erreur lors de l'utilisation de GO.

Mais si je supprime les instructions GO, j'obtiens une erreur lors de la création de messages car la table TestDB n'a pas été créée.

Est-il possible d'utiliser Dapper pour résoudre ce problème?

J'ai été capable de le faire uniquement en utilisant SQL Server SDK.

Réponse acceptée

Dapper ne peut pas vous aider ici. Au lieu de cela, je vous suggère d'essayer les objets de gestion SQL Server pour exécuter des commandes SQL volumineuses telles que celle que vous avez mentionnée. Et il prend en charge les instructions GO.

Vous pouvez consulter cet article de blog pour des instructions détaillées.


Réponse populaire

GO n'est pas une instruction SQL, il s'agit simplement d'un séparateur de lots. En fait, vous pouvez le renommer à votre guise.

séparateur de lots

La manière dont Management Studio se débrouille est en analysant le SQL. Il est facile d'écrire un analyseur trivial qui peut décomposer les déclarations. Il suffit de diviser la chaîne sur "GO" et d'envoyer chaque instruction à Dapper.

Cependant, pour être correct à 100%, vous avez besoin d'un analyseur sophistiqué .

select '
GO ' GO from [GO] 



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi