строковые литералы Юникода с использованием двойных кавычек

в SQL Server мы обозначаем строковые литералы Unicode следующим образом:

declare @s nvarchar(max)
select @s = N'test'

однако мы также можем использовать двойные кавычки... поэтому мы должны сделать это:

set quoted_identifier off
declare @s nvarchar(max)
select @s = N"test"

но тут я ошибся:

Сообщение 102, уровень 15, состояние 1, строка 2. Неверный синтаксис рядом с «тестом».

какая правильная форма?


person ekkis    schedule 17.09.2012    source источник


Ответы (2)


Вы не можете использовать двойные кавычки для разделения строк символов Unicode в T-SQL.

И что? Какую проблему вы пытаетесь решить?

Вы по-прежнему можете вставлять одинарные кавычки в строку Unicode, удваивая их.

SELECT N'This isn''t a problem'
person GilM    schedule 17.09.2012
comment
Проблема в том, что у нас может быть большой объем текста с множеством одинарных кавычек, и гораздо проще заключить все это в двойные кавычки. Это не ответ на вопрос. - person Lukos; 14.03.2017
comment
Это является ответом на вопрос. Желаемый синтаксис просто неверен, а двойные кавычки нельзя использовать с литералами Unicode. И есть обходной путь. Если сложно удвоить одинарные кавычки вручную, используйте функцию «Найти/Заменить» SSMS (или любого другого редактора) и замените каждый ' двумя из них в выделенном тексте. - person GilM; 04.09.2018

В T-SQL вы можете использовать двойные кавычки для указания имени столбца в операторе SELECT точно так же, как use может использовать квадратные скобки [].

Сравнивать

select 1 as "value x"
select 1 as [value x]

оба приводят к столбцу с именем value x.

Для строковых литералов можно использовать только '' и N''.

Обновление после комментария Николы

На странице MSDN о константах T-SQL упоминается QUOTED_IDENTIFIER/двойная кавычка /одиночная кавычка только для «констант символьных строк», но раздел «Строки Unicode» относится только к нотации N''.

person devio    schedule 17.09.2012
comment
Не совсем, OP использует отключить quoted_идентификатор чтобы изменить это поведение. Вопрос в том, почему нам не разрешено указывать константу юникода с помощью двойных кавычек. - person Nikola Markovinović; 18.09.2012
comment
О, спасибо, @Nikola. Тогда правильный ответ на неправильный вопрос ;) - person devio; 18.09.2012