Sql170ScriptGenerator.GenerateScript removing required semicolon from BEGIN...END block within Stored Procedure creation
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 64/100
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
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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/SqlScriptDOM
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
microsoft/SqlScriptDOM#228 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
microsoft/SqlScriptDOM#183 ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 56/100
microsoft/SqlScriptDOM#226 · 1 réaction ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
microsoft/SqlScriptDOM#225 ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 58/100
microsoft/SqlScriptDOM#224 ·
Toutes les issues de microsoft/SqlScriptDOM
Issues similaires
-
bug server
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
NVIDIA/cuda-quantum#5518 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
langgenius/dify-official-plugins#3982 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
agentscope-ai/QwenPaw#8064 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour