Поделиться через


Анализ кода SQL для улучшения качества кода

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure базе данных SQL в Microsoft Fabric

Вы можете устранить потенциальные проблемы с проектированием и именованием и избежать ошибок производительности, проанализировав код базы данных. Основные понятия очень похожи на выполнение статического анализа для обнаружения и исправления дефектов в управляемом коде. Вы настраиваете правила анализа, которые необходимо применить к коду базы данных, анализируйте код, а затем исправляете или игнорируете обнаруженные проблемы. Прежде чем проанализировать код базы данных, необходимо сначала импортировать схему базы данных в проект базы данных. Дополнительные сведения см. в разделе "Пуск" из существующей базы данных.

Выполняя статический анализ с указанными правилами, можно определить проблемы, которые относятся к следующим категориям:

  • Проблемы проектирования T-SQL включают код, который может не вести себя так, как вы ожидаете, устаревший синтаксис и проблемы, которые могут вызвать проблемы при проектировании изменений базы данных.

  • Проблемы именования T-SQL возникают, если имя объекта базы данных может привести к непредвиденным проблемам или нарушение стандартных соглашений.

  • Проблемы с производительностью T-SQL включают код, который может заметно снизить скорость выполнения операций базы данных. Многие из этих проблем определяют код, который приведет к проверке таблицы при выполнении кода.

    Снимок экрана: параметры проекта SQL Server Data Tools для правил анализа кода.

Правила анализа кода расширяемы. Вы можете создать собственные правила для применения собственных стандартов кодирования. Дополнительные сведения см. в разделе "Общие сведения о расширяемости правил анализа кода".

Пример и синтаксис файла проекта SQL

Файл проекта SQL может содержать два свойства и RunSqlCodeAnalysis SqlCodeAnalysisRules. Элемент RunSqlCodeAnalysis указывает, выполняется ли анализ кода при построении проекта. По умолчанию все включенные правила выполняются и обнаружение шаблонов правил приводит к предупреждению сборки.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="0.2.0-preview" />
  <PropertyGroup>
    <Name>AdventureWorks</Name>
    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
    <ModelCollation>1033, CI</ModelCollation>
    <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
  </PropertyGroup>
...

Элемент SqlCodeAnalysisRules задает правила и их поведение ошибки и предупреждения. В следующем примере правила Microsoft.Rules.Data.SR0006 и Microsoft.Rules.Data.SR0007 отключены, а обнаружение правила Microsoft.Rules.Data.SR008 приведет к ошибке сборки.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="0.2.0-preview" />
  <PropertyGroup>
    <Name>AdventureWorks</Name>
    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
    <ModelCollation>1033, CI</ModelCollation>
    <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
    <SqlCodeAnalysisRules>-Microsoft.Rules.Data.SR0006;-Microsoft.Rules.Data.SR0007;+!Microsoft.Rules.Data.SR0008</SqlCodeAnalysisRules>
  </PropertyGroup>
...

Файл StaticCodeAnalysis.SuppressMessages.xml можно добавить в проект для подавления определенных результатов анализа кода. В следующем примере предупреждение SR0001 для хранимой процедуры в файле StoredProcedures/uspGetEmployeeManagers.sqlподавляется.

<?xml version="1.0" encoding="utf-8" ?>
<StaticCodeAnalysis version="2" xmlns="urn:Microsoft.Data.Tools.Schema.StaticCodeAnalysis">
  <SuppressedFile FilePath="StoredProcedures/uspGetEmployeeManagers.sql">
    <SuppressedRule Category="Microsoft.Rules.Data" RuleId="SR0001" />
  </SuppressedFile>
</StaticCodeAnalysis>

Предоставленные правила

Проблемы с проектированием T-SQL

При анализе кода T-SQL в проекте базы данных один или несколько предупреждений могут быть классифицированы как проблемы с проектированием. Чтобы избежать следующих ситуаций, следует устранить проблемы с проектированием.

  • Последующие изменения в базе данных могут нарушить приложения, зависящие от него.
  • Код может не привести к ожидаемому результату.
  • Код может прерваться, если он запускается с будущими выпусками SQL Server.

Как правило, вы не должны подавлять проблему разработки, так как она может нарушить приложение либо сейчас, либо в будущем.

Указанные правила определяют следующие проблемы проектирования:

Проблемы с именованием T-SQL

При анализе кода T-SQL в проекте базы данных один или несколько предупреждений могут быть классифицированы как проблемы именования. Чтобы избежать следующих ситуаций, следует устранить проблемы с именованием:

  • Имя, указанное для объекта, может конфликтовить с именем системного объекта.
  • Указанное имя всегда должно быть заключено в escape-символы (в SQL Server, "[" и "]").
  • Указанное имя может запутать других, которые пытаются прочитать и понять код.
  • Код может прерваться, если он запускается с будущими выпусками SQL Server.

Как правило, можно отключить проблему именования, если другие приложения, которые нельзя изменить, зависят от текущего имени.

Указанные правила определяют следующие проблемы проектирования:

Проблемы с производительностью T-SQL

При анализе кода T-SQL в проекте базы данных один или несколько предупреждений могут быть классифицированы как проблемы с производительностью. Чтобы избежать следующей ситуации, следует устранить проблему производительности:

  • При выполнении кода выполняется сканирование таблицы.

Как правило, вы можете отключить проблему производительности, если таблица содержит так мало данных, что проверка не приведет к значительному снижению производительности.

Указанные правила определяют следующие проблемы проектирования:

Включение и отключение анализа кода

Чтобы включить или отключить анализ кода SQL в Visual Studio, щелкните проект правой кнопкой мыши в Обозреватель решений и выберите "Свойства". На вкладке "Анализ кода" окна свойств выберите нужные параметры анализа кода.

Чтобы отключить или включить определенное правило, выберите правило из таблицы. Чтобы изменить серьезность правила, в списке выберите поле " Предупреждение как ошибка ".

Чтобы включить или отключить анализ кода SQL в проектах SQL в стиле ПАКЕТА SDK (предварительная версия), измените .sqlproj файл напрямую. .sqlproj Откройте файл из представления Обозреватель решений, дважды щелкнув проект.

В текстовом редакторе добавьте элемент <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> в первый <PropertyGroup> блок, чтобы включить анализ кода. Чтобы отключить анализ кода, измените значение RunSqlCodeAnalysis элемента True на элемент или False удалите его полностью.

Чтобы включить или отключить анализ кода SQL в расширении База данных SQL Projects, измените файл напрямую.sqlproj. .sqlproj Откройте файл из представления обозревателя или щелкните правой кнопкой мыши проект в представлении "Проекты баз данных" и выберите "Изменить SQLPROJ-файл".

В текстовом редакторе добавьте элемент <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> в первый <PropertyGroup> блок, чтобы включить анализ кода. Чтобы отключить анализ кода, измените значение RunSqlCodeAnalysis элемента True на элемент или False удалите его полностью.

Чтобы переопределить параметры анализа кода в файле проекта, с помощью команды можно использовать /p:RunSqlCodeAnalysis свойства и /p:SqlCodeAnalysisRules свойства dotnet build . Например, чтобы выполнить сборку с отключенным анализом кода:

dotnet build /p:RunSqlCodeAnalysis=False

Чтобы создать определенные параметры правила анализа кода SQL, выполните следующие действия.

dotnet build /p:RunSqlCodeAnalysis=True /p:SqlCodeAnalysisRules="+!Microsoft.Rules.Data.SR0001;+!Microsoft.Rules.Data.SR0008"