Сохранение одинарных кавычек в переменной varchar SQL Server 2008

#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? Кроме того, вам следует предоставить объяснение вашего решения над ним.