如何在SQL Server 2005中使用单引号插入文本

36

我想在 SQL Server 2005 数据库的表中插入带有单引号的文本,例如 john's。


例如:在将数据保存到另一个表时,添加另一个单引号会导致问题。 例如:insert into table1(select * from table2) - user210187
6个回答

23

正如Kirtan所指出的那样,可以通过添加额外的单引号来转义单引号。 如果您试图通过sp_executesql执行动态sql(这本身就不是一个好主意),则下面的代码适用于您:

sp_executesql N'INSERT INTO SomeTable (SomeColumn) VALUES (''John''''s'')'

19
答案真正取决于您如何执行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

如果您正在使用代码进行INSERT操作,请使用参数:

// 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。


谢谢您... 但是这段代码无法用于动态更新查询。 - ramesh
4
你能否详细说明你的问题?参数在几乎所有查询中都能使用。我很好奇为什么它们在你的情况下不能工作。 - Brannon

16

这个对我有用:

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

基本上,你需要将想要插入的单引号替换为两个单引号。因此,如果你想要插入一个带单引号的文本字符串 ('text'),并在其周围添加单引号,那么应该写为 ('''text''')。希望这可以帮到你。


7
INSERT INTO Table1 (Column1) VALUES ('John''s')

或者您可以使用存储过程,并将参数传递为 -

usp_Proc1 @Column1 = 'John''s'

如果您正在使用INSERT查询而不是存储过程,则必须用两个引号转义引号,否则如果不这样做也没关系。


当值来自一个变量时,如何实现这一点? - solairaja
1
@solairaja - @somevar = '测试' - Kirtan

1
这个答案适用于SQL Server 2005、2008和2012。
有时候值中有很多单引号。不要像上面描述的那样在每个单引号旁边添加一个单引号,而是可以使用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
你询问如何在SQL Server中转义撇号字符(')。以上所有回答都非常好地解释了这一点。
然而,根据情况,右单引号字符(’)可能更合适。
(无需使用转义字符)
-- Direct insert
INSERT INTO Table1 (Column1) VALUES ('John’s')

• 单引号(U+0027)

维基百科上的ASCII单引号

• 右单引号(U+2019)

维基百科上的Unicode右单引号


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接