Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: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="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.SR008 приведет к ошибке сборки.
<?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.
Как правило, вы не должны подавлять проблему разработки, так как она может нарушить приложение либо сейчас, либо в будущем.
Указанные правила определяют следующие проблемы проектирования:
- 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", измените этот файл напрямую .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"