Как вставить текст с одинарной кавычкой SQL Server 2005 - PullRequest
36 голосов
/ 22 апреля 2009

Я хочу вставить текст с одинарной кавычкой Например, таблица Джона в базе данных sql server 2005

Ответы [ 6 ]

23 голосов
/ 22 апреля 2009

Избегайте одинарных кавычек с дополнительным синглом, как указал Киртан
И если вы пытаетесь выполнить динамический sql (что не очень хорошая идея) через sp_executesql, тогда приведенный ниже код будет работать для вас

sp_executesql N'INSERT INTO SomeTable (SomeColumn) VALUES (''John''''s'')'
19 голосов
/ 22 апреля 2009

Ответ на самом деле зависит от того, как вы делаете INSERT.

Если вы указываете SQL-литерал, вам нужно использовать двойной тик:

-- Direct insert
INSERT INTO Table1 (Column1) VALUES ('John''s')

-- Using a parameter, with a direct insert
DECLARE @Value varchar(50)
SET @Value = 'John''s'
INSERT INTO Table1 (Column1) VALUES (@Value)

-- Using a parameter, with dynamic SQL
DECLARE @Value varchar(50)
SET @Value = 'John''s'
EXEC sp_executesql 'INSERT INTO Table1 (Column1) VALUES (@p1)', '@p1 varchar(50)', @Value

Если вы делаете ВСТАВКУ из кода, используйте параметры:

// Sample ADO.NET
using (SqlConnection conn = new SqlConnection(connectionString)) {
    conn.Open();
    using (SqlCommand command = conn.CreateCommand()) {
        command.CommandText = "INSERT INTO Table1 (Column1) VALUES (@Value)";

        command.Parameters.AddWithValue("@Value", "John's");

        command.ExecuteNonQuery();
    }
}

Если ваши данные содержат пользовательский ввод, прямой или косвенный, ИСПОЛЬЗОВАТЬ ПАРАМЕТРЫ . Параметры защищают от атак SQL-инъекций. Никогда не создавайте динамический SQL с помощью пользовательского ввода.

16 голосов
/ 24 июня 2011

Это сработало для меня:

  INSERT INTO [TABLE]
  VALUES ('text','''test.com''', 1)

Обычно вы берете одинарную кавычку, которую хотите вставить, и заменяете ее на две. Поэтому, если вы хотите вставить строку текста ('text') и добавить одинарные кавычки вокруг нее, это будет ('' 'text' ''). Надеюсь, это поможет.

7 голосов
/ 22 апреля 2009
INSERT INTO Table1 (Column1) VALUES ('John''s')

Или вы можете использовать хранимую процедуру и передать параметр как -

usp_Proc1 @Column1 = 'John''s'

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

1 голос
/ 04 февраля 2016

Этот ответ работает в SQL Server 2005, 2008, 2012.

Иногда значение имеет МНОЖЕСТВО одинарных кавычек. Вместо добавления одинарной кавычки рядом с каждой одинарной кавычкой, как описано выше с 'John''s'. И есть примеры использования функции REPLACE для обработки множества одинарных кавычек в значении.

Попробуйте следующее. Это оператор обновления, но вы также можете использовать его в операторе INSERT.

SET QUOTED_IDENTIFIER OFF

DECLARE @s VARCHAR(1000)

SET @s = "SiteId:'1'; Rvc:'6'; Chk:'1832'; TrEmp:'150'; WsId:'81'; TtlDue:'-9.40'; TtlDsc:'0'; TtlSvc:'0'; TtlTax:'-0.88'; TtlPay:'0'; TipAmt:'0.00'; SvcSeq:'09'; ReTx:'N'; TraceId:'160110124347N091832';"


UPDATE TransactionPaymentPrompt
set PromptData = @s

from TransactionPaymentPrompt tpp with (nolock)
where tpp.TransactionID = '106627343'
0 голосов
/ 30 марта 2016

Вы спрашивали, как избежать Apostrophe character (') в SQL Server. Все ответы, приведенные выше, отлично объясняют это.

Однако, в зависимости от ситуации, Right single quotation mark character (’) может быть уместным.

(escape-символы не нужны)

-- Direct insert
INSERT INTO Table1 (Column1) VALUES ('John’s')

• Апостроф (U + 0027)

Аский Апостроф в Википедии

• Правая одинарная кавычка (U + 2019)

Юникод Правая одинарная кавычка в Википедии

...