Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta
#219 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
64/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
csharp, sql
Ambito
backend, databases

Direzione di ricerca

Inizia con la riproduzione C# fornita, in particolare TSql170Parser e Sql170ScriptGenerator.GenerateScript, e traccia il modo in cui viene restituita l'istruzione BEGIN...END quando IncludeSemicolons è abilitato. Riproduci l'output e verifica che la procedura generata conservi il punto e virgola richiesto prima del WITH CTE seguente, quindi conferma che l'SQL formattato venga eseguito correttamente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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();
Lingua principale
GAP
Stelle
277
Fork
43
Merge medio
6g 17h
PR unite (30g)
3

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di microsoft/SqlScriptDOM

Tutte le issue di microsoft/SqlScriptDOM

Issue simili

Altre issue su Backend & API Design

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.