Функция QUOTENAME SQL-сервера

В этом руководстве вы узнаете, как использовать функцию SQL Server QUOTENAME(), чтобы сделать строку допустимым идентификатором с разделителями SQL Server.

Функция SQL Server QUOTENAME()

Функция SQL Server QUOTENAME() добавляет разделители к входной строке, чтобы сделать эту строку допустимым идентификатором SQL Server с разделителями.

Ниже показан синтаксис функции QUOTENAME():

QUOTENAME( input_string [ , quote_character ] )   

Функция QUOTENAME() принимает два аргумента:

  • input_string — это SYSNAME, максимальная длина которого составляет 128 символов. Если длина input_string превышает 128 символов, функция вернет NULL.
  • quote_character — символ, который используется в качестве разделителя.

Допустимыми символами кавычек являются следующие:

  • Одинарная кавычка( ' )
  • Левая или правая скобка( [] )
  • Двойные кавычки( ”)
  • Левая или правая скобка(() )
  • Знак «больше» или «меньше»( >< )
  • Левая или правая фигурная скобка( {} )
  • Обратный апостроф(`).

Если вы используете недопустимый символ, функция вернет NULL. По умолчанию quote_character будет содержать скобки, если вы его пропустите.

SQL Server QUOTENAME() полезен в динамическом SQL.

Пример функции SQL Server QUOTENAME()

Следующие операторы создают новую таблицу, имя которой содержит пробел, и вставляют в таблицу новую строку:

CREATE TABLE [customer details]
(
    customer_id INT PRIMARY KEY, 
    info        VARCHAR(255)
);
INSERT INTO [customer details]
(
    customer_id, 
    info
)
VALUES
(
    1, 
    'detailed information...'
);

Следующий код пытается запросить данные из таблицы [сведения о клиенте] с помощью динамического SQL:

DECLARE @tablename VARCHAR(128) = 'customer details';
DECLARE @sql NVARCHAR(100) = 'SELECT * FROM ' + @tablename;
EXECUTE(@sql);

Возвращает следующую ошибку:

Invalid object name 'customer'.    

Следующий код делает имя таблицы допустимым с помощью функции QUOTENAME():

DECLARE @tablename VARCHAR(128) = 'customer details';
DECLARE @sql NVARCHAR(100) = 'SELECT * FROM ' + QUOTENAME(@tablename);
EXECUTE(@sql);  

Вот что получилось:

customer_id info
----------- -----------------------
1           detailed information...
(1 row affected)

В этом руководстве вы узнали, как использовать функцию SQL Server QUOTENAME() для добавления разделителей к строке и превращения этой строки в допустимый идентификатор SQL Server с разделителями.

Мирослав С.

Автор статей, ИБ-специалист