Анализ кода SQL для улучшения качества кода
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure базе данных SQL в Microsoft Fabric
Вы можете устранить потенциальные проблемы с проектированием и именованием и избежать ошибок производительности, проанализировав код базы данных. Основные понятия очень похожи на выполнение статического анализа для обнаружения и исправления дефектов в управляемом коде. Вы настраиваете правила анализа, которые необходимо применить к коду базы данных, анализируйте код, а затем исправляете или игнорируете обнаруженные проблемы. Прежде чем проанализировать код базы данных, необходимо сначала импортировать схему базы данных в проект базы данных. Дополнительные сведения см. в разделе "Пуск" из существующей базы данных.
Выполняя статический анализ с указанными правилами, можно определить проблемы, которые относятся к следующим категориям:
Проблемы проектирования T-SQL включают код, который может не вести себя так, как вы ожидаете, устаревший синтаксис и проблемы, которые могут вызвать проблемы при проектировании изменений базы данных.
Проблемы именования T-SQL возникают, если имя объекта базы данных может привести к непредвиденным проблемам или нарушение стандартных соглашений.
Проблемы с производительностью T-SQL включают код, который может заметно снизить скорость выполнения операций базы данных. Многие из этих проблем определяют код, который приведет к проверке таблицы при выполнении кода.
Правила анализа кода расширяемы. Вы можете создать собственные правила для применения собственных стандартов кодирования. Дополнительные сведения см. в разделе "Общие сведения о расширяемости правил анализа кода".
Пример и синтаксис файла проекта 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.
Как правило, вы не должны подавлять проблему разработки, так как она может нарушить приложение либо сейчас, либо в будущем.
Указанные правила определяют следующие проблемы проектирования:
- SR0001: избегайте SELECT * в хранимых процедурах, представлениях и функциях с табличным значением
- SR0008: рекомендуется использовать SCOPE_IDENTITY вместо @@IDENTITY
- SR0009: избегайте использования типов переменной длины, размер которых составляет 1 или 2
- SR0010: избегайте использования устаревшего синтаксиса при присоединении таблиц или представлений
- SR0013: выходной параметр (параметр) не заполняется во всех путях кода
- SR0014: при приведение от {Type1} к {Type2} может возникать потеря данных
Проблемы с именованием T-SQL
При анализе кода T-SQL в проекте базы данных один или несколько предупреждений могут быть классифицированы как проблемы именования. Чтобы избежать следующих ситуаций, следует устранить проблемы с именованием:
- Имя, указанное для объекта, может конфликтовить с именем системного объекта.
- Указанное имя всегда должно быть заключено в escape-символы (в SQL Server, "[" и "]").
- Указанное имя может запутать других, которые пытаются прочитать и понять код.
- Код может прерваться, если он запускается с будущими выпусками SQL Server.
Как правило, можно отключить проблему именования, если другие приложения, которые нельзя изменить, зависят от текущего имени.
Указанные правила определяют следующие проблемы проектирования:
- SR0011: избегайте использования специальных символов в именах объектов
- SR0012: избегайте использования зарезервированных слов для имен типов
- SR0016: избегайте использования sp_ в качестве префикса для хранимых процедур
Проблемы с производительностью T-SQL
При анализе кода T-SQL в проекте базы данных один или несколько предупреждений могут быть классифицированы как проблемы с производительностью. Чтобы избежать следующей ситуации, следует устранить проблему производительности:
- При выполнении кода выполняется сканирование таблицы.
Как правило, вы можете отключить проблему производительности, если таблица содержит так мало данных, что проверка не приведет к значительному снижению производительности.
Указанные правила определяют следующие проблемы проектирования:
- SR0004. Избегайте использования столбцов, не имеющих индексов в качестве тестовых выражений в предикатах IN
- SR0005: избегайте использования шаблонов, начинающихся с "%" в предикатах LIKE
- SR0006. Перемещение ссылки на столбец на одну сторону оператора сравнения для использования индекса столбца
- SR0007: используйте ISNULL(column, default_value) для столбцов, допускающих значение NULL, в выражениях
- SR0015: извлечение детерминированных вызовов функций из предикатов WHERE
Включение и отключение анализа кода
Чтобы включить или отключить анализ кода 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"