Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto
#219 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
64/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
csharp, sql

Línea de trabajo

Comienza con la reproducción de C# proporcionada, especialmente con TSql170Parser y Sql170ScriptGenerator.GenerateScript, y sigue cómo se representa la instrucción BEGIN...END cuando IncludeSemicolons está habilitado. Reproduce la salida y verifica que el procedimiento generado conserve el punto y coma requerido antes del siguiente WITH CTE; después, confirma que el SQL formateado se ejecuta correctamente.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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();
Lenguaje dominante
GAP
Estrellas
277
Forks
43
Merge medio
6 d 17 h
PR fusionados (30 d)
3

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/SqlScriptDOM

Todos los issues de microsoft/SqlScriptDOM

Issues similares

Más issues de Backend & API Design

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.