Можете ли вы привести в кавычки идентификаторы переменных и идентификаторы параметров в TSQL? - PullRequest
1 голос
/ 24 апреля 2019

Можно ли заключать в кавычки переменные и идентификаторы параметров в TSQL.Документация предполагает, что это возможно.Однако при выполнении имен переменных в кавычках возникает ошибка.

-- This works fine, as one would expect
DECLARE @ExampleVariableGood bigint

-- Error - "can" variable names be quoted identifiers?
DECLARE [@ExampleVariableBad] bigint

При выполнении сценария выдается следующая ошибка:

Msg 155, Level 15, State 2, Line 5
'bigint' is not a recognized CURSOR option.

В документации указано, что идентификаторы переменных должны следовать тем же правиламчто касается всех идентификаторов:

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/declare-local-variable-transact-sql?view=sql-server-2017

Это странный запрос, единственная причина, по которой нам нужно это работать, - ошибка автоматического форматирования инструмента SQL Studio, которая неправильно цитирует имена переменных, что-то, что делает клиентне хочет меняться!

1 Ответ

1 голос
/ 24 апреля 2019

Все цитаты взяты из Идентификаторы базы данных

Переменные следуют правилам для «обычных идентификаторов». Они классифицируются как:

Обычные идентификаторы
Соблюдайте правила для формата идентификаторов. Регулярные идентификаторы не разделяются, когда они используются в инструкциях Transact-SQL.

Объект, заключенный в кавычки (заключенный в скобки ([])), является не обычным идентификатором, а идентификатором с разделителями:

Идентификаторы с разделителями Заключены в двойные кавычки (") или квадратные скобки ([]). Идентификаторы, соответствующие правилам формата идентификаторов, не могут быть разделены. Например:

То, что переменная следует правилам для обычного идентификатора, можно найти в разделе «Правила для обычных идентификаторов»:

Имена переменных, функций и хранимых процедур должны соответствовать со следующими правилами для идентификаторов Transact-SQL.

  1. Первый символ должен быть одним из следующих:

    • Буква в соответствии со стандартом Unicode 3.2. Определение букв Unicode включает латинские символы от a до z, от От A до Z, а также буквенные символы с других языков.

    • Подчеркивание (_), знак (@) или знак числа (#).

      Некоторые символы в начале идентификатора имеют особое значение в SQL Server. Обычный идентификатор, который начинается с Знак всегда обозначает локальную переменную или параметр и не может быть использован как имя любого другого типа объекта. Идентификатор, который начинается со знаком числа обозначает временную таблицу или процедуру. Идентификатор, который начинается с двойных чисел (##) обозначает глобальный временный объект Хотя знак числа или знак двойного числа символы могут использоваться, чтобы начать имена других типов объектов, мы не рекомендуем эту практику.

      Некоторые функции Transact-SQL имеют имена, начинающиеся с двойных символов (@@). Во избежание путаницы с этими функциями не следует используйте имена, начинающиеся с @@.

Поэтому, поскольку имя переменной должно быть обычным идентификатором, с разделителем идентификатор [@ExampleVariable] не является допустимым именем.

Хотя, как ни странно, вы можете создать SP / функцию с идентификатором с разделителями, который делает вывод, что документация устарела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...