Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
База данных 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>
Provided rules
Проблемы с проектированием 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"