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

Применимо к:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureSQL в базе данных Microsoft Fabric

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

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

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

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

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

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="1.0.0" />
  <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.SR0008 приводит к ошибке сборки.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="1.0.0" />
  <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 в расширении "Проекты баз данных SQL", измените .sqlproj файл непосредственно или используйте диалоговое окно параметров анализа кода.

Используйте диалоговое окно «Параметры анализа кода» в Visual Studio Code

Расширение "Проекты баз данных SQL" предоставляет диалоговое окно параметров для настройки правил анализа кода без непосредственного .sqlproj редактирования файла.

Чтобы открыть диалоговое окно «Настройки анализа кода», щелкните правой кнопкой мыши проект в представлении Database Projects и выберите Настройки анализа кода.

Снимок экрана диалогового окна

В диалоговом окне можно:

  • Включите или отключите анализ кода при сборке с помощью переключателя Включить анализ кода при сборке в верхней части диалогового окна.
  • Включите или отключите категорию правил , выбрав или отключив флажок рядом с именем категории (конструктор, именование, производительность).
  • Измените уровень серьезности правила , выбрав уровень серьезности в раскрывающемся списке рядом с правилом. Доступные варианты: предупреждение, ошибка и нет.
  • Найдите правило с помощью панели поиска в верхней части списка правил.
  • Фильтрация правил по серьезности с помощью раскрывающегося списка "Все серьезности ".

Нажмите кнопку "ОК ", чтобы сохранить изменения и закрыть диалоговое окно, или применить , чтобы сохранить без закрытия. Выберите "Сброс", чтобы вернуться к параметрам по умолчанию.

Изменение файла проекта SQL для изменения параметров анализа кода

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

Чтобы включить или отключить анализ кода SQL в SQL Server Management Studio (SSMS), щелкните проект правой кнопкой мыши в Обозреватель решений и выберите Properties. На вкладке Анализ кода окна свойств выберите нужные параметры анализа кода.

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

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

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

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

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

Чтобы переопределить параметры анализа кода в файле проекта, используйте свойства /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"