Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Sql170ScriptGenerator.GenerateScript removing required semicolon from BEGIN...END block within Stored Procedure creation

Ouverte
#219 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
64/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Calme
Stack technique
csharp, sql
Domaine
backend, databases

Piste de recherche

Commencez par la reproduction C# fournie, en particulier TSql170Parser et Sql170ScriptGenerator.GenerateScript, et suivez la manière dont l’instruction BEGIN...END est générée lorsque IncludeSemicolons est activé. Reproduisez la sortie et vérifiez que la procédure générée conserve le point-virgule requis avant le WITH CTE suivant, puis confirmez que le SQL formaté s’exécute correctement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

formatting

I attempted to format my T-SQL script using the GenerateScript method in the Sql170ScriptGenerator class. The following script was a test used to generate a stored procedure:

ORIGINAL:
CREATE PROCEDURE spDEBUG_ReleaseToolTestScript 
AS
IF EXISTS (SELECT 1) BEGIN;
	SELECT 1;
END;
WITH TEST AS (
	SELECT 1 AS One
)
SELECT *
FROM TEST;
GO
FORMATTED:
CREATE PROCEDURE spDEBUG_ReleaseToolTestScript
AS
IF EXISTS (SELECT 1)
    BEGIN
        SELECT 1;
    END
WITH   TEST 
AS     (SELECT 1 AS One)
SELECT *
FROM   TEST ;

Running the formatted SQL script will throw the following error in T-SQL:
Msg 319, Level 15, State 1, Line 88 Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

Code to reproduce:

using Microsoft.SqlServer.TransactSql.ScriptDom;
using System.Diagnostics;

var sql = @"
CREATE PROCEDURE spDEBUG_ReleaseToolTestScript 
AS
IF EXISTS (SELECT 1) BEGIN;
	SELECT 1;
END;
WITH TEST AS (
	SELECT 1 AS One
)
SELECT *
FROM TEST;
GO";

Console.WriteLine("ORIGINAL:" + sql);

var reader = new StringReader(sql);
var parser = new TSql170Parser(true);

var fragment = (TSqlScript)parser.Parse(reader, out var errors);

if (errors.Count > 0)
{
    Console.WriteLine("Failed to parse SQL script:");
    foreach (var error in errors)
    {
        Console.WriteLine(error.Message);
    }

    Debugger.Break();
}

var options = new SqlScriptGeneratorOptions
{
    IncludeSemicolons = true,
    IndentationSize = 4
};
var generator = new Sql170ScriptGenerator(options);

generator.GenerateScript(fragment.Batches[0].Statements[0], out var formattedSql);

Console.WriteLine();
Console.WriteLine("FORMATTED:" + Environment.NewLine + formattedSql);
Console.ReadLine();
Langage dominant
GAP
Étoiles
277
Forks
43
Merge moyen
46 min
PR mergées (30 j)
2

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/SqlScriptDOM

Toutes les issues de microsoft/SqlScriptDOM

Issues similaires

Plus d'issues Backend & API Design

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.