Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
SQL в базе данных Microsoft Fabric
Вы можете устранить потенциальные проблемы с проектированием и именованием и избежать ошибок производительности, проанализировав код базы данных. Основные понятия аналогичны выполнению статического анализа для обнаружения и исправления дефектов в управляемом коде. Вы настраиваете правила анализа, которые необходимо применить к коду базы данных, анализируйте код, а затем исправляете или игнорируете обнаруженные проблемы. Прежде чем проанализировать код базы данных, необходимо сначала импортировать схему базы данных в проект базы данных. Дополнительные сведения см. в разделе "Пуск" из существующей базы данных.
Выполняя статический анализ с помощью предоставленных правил , можно выявить проблемы, которые входят в следующие категории Transact-SQL (T-SQL):
Проблемы проектирования 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.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.
Как правило, не подавляйте проблему разработки, так как она может нарушить приложение либо сейчас, либо в будущем.
Указанные правила определяют следующие проблемы проектирования:
- 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 в расширении "Проекты баз данных 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"