Sql170ScriptGenerator.GenerateScript removing required semicolon from BEGIN...END block within Stored Procedure creation
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 64/100
Direção de pesquisa
Comece pela reprodução em C# fornecida, especialmente por TSql170Parser e Sql170ScriptGenerator.GenerateScript, e rastreie como a instrução BEGIN...END é renderizada quando IncludeSemicolons está habilitado. Reproduza a saída e verifique se o procedimento gerado preserva o ponto e vírgula necessário antes do WITH CTE seguinte; em seguida, confirme que o SQL formatado é executado com sucesso.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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();
- Linguagem predominante
- GAP
- Estrelas
- 278
- Forks
- 46
- Merge médio
- 9d 23h
- PRs com merge (30d)
- 2
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de microsoft/SqlScriptDOM
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
microsoft/SqlScriptDOM#228 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
microsoft/SqlScriptDOM#183 ·
-
Add a Multiline option for CASE expressions (WHEN/THEN/ELSE on their own lines)Talvez já em andamento @trg-alasdair assumiu há 7 dias. Aberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 56/100
microsoft/SqlScriptDOM#226 · 1 reação ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
microsoft/SqlScriptDOM#225 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 58/100
microsoft/SqlScriptDOM#224 ·
Todas as issues de microsoft/SqlScriptDOM
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
bmander/geomsolver#118 ·
Mantenedores costumam responder em até 1 dia
-
bug needs-triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
Mantenedores costumam responder em até 1 dia
-
bug priority:high
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia
-
api bug claude
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
diegosouzapw/OmniRoute#15764 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
btclib-org/btclib-wallet#301 ·
Mantenedores costumam responder em até 1 dia