#sql #sql-server #tsql #sql-server-2008
#sql #sql-сервер #tsql #sql-server-2008
Вопрос:
Мне было интересно, есть ли способ сохранить одинарные кавычки в SQL Server 2008. Я создаю несколько отчетов, и все эти отчеты абсолютно одинаковы, за исключением того, что они отличаются только кодами, которые я выбираю. Например, в одном отчете используются коды ‘abc’, ‘def’, ‘ghi’, а в другом отчете используются коды ‘jkl’, ‘mno’, ‘pqr’. Я думал, чтобы уменьшить количество хранимых процедур, которые мне придется выполнять, я мог бы создать параметр в отчете, чтобы выбрать, какой тип отчета запускать. Исходя из этого, я бы использовал правильные коды. Итак, я собирался сохранить эти коды в переменной varchar. Ниже приведена функциональность, на которую я надеялся:
DECLARE @codes1 varchar, @codes2 varchar
SET @codes1 = ''abc', 'def', 'ghi''
SET @codes2 = ''jkl', 'mno', 'pqr''
Затем я собирался использовать соответствующую переменную varchar на основе параметра, выбранного пользователем. Единственная проблема заключается в настройке переменных, поскольку строка будет содержать одинарные кавычки (строка будет использоваться в инструкции SQL ‘IN’, поэтому присутствуют одинарные кавычки).
Ответ №1:
Вот так. Да, Oded является правильным. Подходящей терминологией для этого является «экранирование». Вы можете избежать одинарной кавычки '
, удвоив ее ''
DECLARE @codes1 varchar(50), @codes2 varchar(50)
SET @codes1 = '''abc'', ''def'', ''ghi'''
SET @codes2 = '''jkl'', ''mno'', ''pqr'''
Комментарии:
1. Иначе, экранируйте одиночное
'
значение, удвоив его''
.2. Вам также потребуется длина в объявлениях переменных, чтобы избежать усечения на 1 символ.
3. Спасибо! Это именно то, что мне было нужно! Кроме того, спасибо @Martin за добавленный комментарий! Мне это тоже было нужно!
Ответ №2:
Старайтесь избегать жестко заданных значений. Создайте таблицу для хранения этих значений вместе со способом их группировки.
Table CodeGroups
GroupNumber | Codes
1 | abc
1 | def
1 | ghi
2 | kkl
2 | mno
2 | pqr
Таким образом, пользователю нужно только выбрать GroupNumber = 1
Вы связываете таблицу CodeGroups с таблицей со строками кода. Все, что вам нужно сделать, чтобы добавить еще один код, это внести запись в эту таблицу и присвоить ей номер группы.
Ответ №3:
Избегайте проблемы с одним qoute, просто удвоив его.
Значение Varchar2(10):= «abc»; — Вы получите сообщение об ошибке.
Значение Varchare(10):= «‘abc»‘; — Решит вашу проблему.
Ответ №4:
int varId = "1";
String varItem = "Google's root";
String strSQL = "INSERT INTO table("
"id,"
"item"
")"
"VALUES('" varId
"', '" varItem
"')";
Комментарии:
1. Упомянутый OP с использованием SQL Server 2008 — предназначено ли ваше решение для работы с SQL Server 2008? Кроме того, вам следует предоставить объяснение вашего решения над ним.