Как избежать квадратных скобок в псевдониме столбца?

Следующее дает ошибку:

SELECT 1 AS [dada[daa]]

Msg 105, Level 15, State 1, Line 190 Unclosed quotation mark after the character string 'dada[daa] '.

Msg 102, Level 15, State 1, Line 190 Incorrect syntax near 'dada[daa] '.

и если у меня есть квадратные скобки в псевдониме столбца, я могу использовать такие кавычки:

SELECT 1 AS 'dada[daa]'

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

Итак, есть ли способ как-то избежать этих скобок?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 199
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Очевидным ответом было бы избегать квадратных скобок в именах. Скобки и двойные кавычки используются в качестве символов кавычек в T-SQL (двойные кавычки также используются в стандарте ANSI).

Кроме того, вы можете дважды заключать в кавычки символ кавычки, например:

select 1 as [da[da]]]

da[da]
------
1

Или

select 1 as "da[da]"

da[da]
------
1

И наконец

select 1 as "da""da"""

da"da"
------
1

Опять же, вы, вероятно, должны сделать это нет, так как это приводит к хрупкому коду.

Настоящая проблема

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

Обычное решение этой проблемы — локализовать результаты на уровне презентация, а не в запросе. Это поддерживается большинством инструментов отчетности, стеков веб-приложений и настольных приложений. Windows Forms, WPF и все стеки ASP.NET имеют свои собственные функции локализации.

Так же как и Службы отчетности, хотя более современное решение будет извлекать переводы из другого источника, например из базы данных.

В идеальном мире - это будет хорошо :-) Я нахожусь в ситуации, когда клиентам разрешено использовать глобализацию для каждого псевдонима столбца, чтобы получить собственный текст в своих отчетах, и никаких ограничений в интерфейсе глобализации не установлено...

gotqn 13.06.2019 09:54

@gotqn Пока псевдонимы полей установлены в запрос, кавычки будут проблемой, независимо от базы данных. Лучшим (и более распространенным) решением будет локализация имен полей в интерфейс, например, веб-страницы, формы или инструмента отчетности. Это поддерживается большинством веб-стеков и инструментов отчетности.

Panagiotis Kanavos 13.06.2019 10:51

@gotqn, если вам нужно локализовать псевдонимы в запросе, вам нужно проверить псевдоним, чтобы увидеть, какая цитата в нем содержится, и использовать «другой». Например, в MySQL вы можете проверить ` или " и заключить псевдоним в другую кавычку. В SQL Server это [] или ". В PostgreSQL есть строки в долларовых кавычках. Если псевдоним содержит кавычки обе .... не позволяйте им введите обе кавычки.

Panagiotis Kanavos 13.06.2019 10:56
Ответ принят как подходящий

Вам нужно удвоить их, как одинарную кавычку ('):

SELECT *
FROM [My]]Table];

Вам нужно сделать это только с правыми скобками, хотя левые не должны быть. Например:

SELECT *
FROM [My[Table];

Однако, основываясь на этом утверждении «но я создаю некоторые сложные динамические операторы T-SQL, и каждый псевдоним столбца заключен в квадратные скобки, и использование кавычек, если псевдоним содержит скобки, немного усложнит задачу»., кажется, что вы делаете что-то вроде '... FROM [' + @TableName + '] ...'; Не надо. Используйте QUOTENAME: ​​'... FROM ' + QUOTENAME(@TableName) + '...'.

QUOTENAME правильно заключает в кавычки и экранирует вашу переменную. Таким образом, для значения '[MyTable]' будет возвращено '[[MyTable]]]'. У него также есть второй, необязательный параметр, который можно использовать для цитирования входных строк с другими идентификаторами. Например, предположим, что переменная @String имеет значение «Не делать», QUOTENAME(@String, '''') вернет 'Don''t'.

спасибо, чувак - удвоить последнее было достаточно - это только для псевдонима столбца, без источников данных, так что все в порядке.

gotqn 13.06.2019 09:44

Если вы можете, я предлагаю QUOTENAME @gotqn. Это бесценно при создании динамического SQL.

Larnu 13.06.2019 09:45

Другие вопросы по теме