如何使用单引号 sql server 2005 插入文本

Posted

技术标签:

【中文标题】如何使用单引号 sql server 2005 插入文本【英文标题】:How to insert text with single quotation sql server 2005 【发布时间】:2010-10-21 00:20:12 【问题描述】:

我想插入带单引号的文本 例如 john's to table in sql server 2005 数据库

【问题讨论】:

但是在现有的单引号中添加另一个单引号会在将数据保存到另一个表时产生问题,例如:插入 table1(select * from table2) 【参考方案1】:
INSERT INTO Table1 (Column1) VALUES ('John''s')

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

usp_Proc1 @Column1 = 'John''s'

如果您使用的是 INSERT 查询而不是存储过程,则必须用两个引号对引号进行转义,否则如果您不这样做也可以。

【讨论】:

当值来自变量时如何可能 @solairaja - @somevar = 'Test's'【参考方案2】:

正如 Kirtan 指出的那样,用一个额外的单引号来转义单引号 如果您尝试通过 sp_executesql 执行动态 sql(这首先不是一个好主意),那么下面的代码将为您工作

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

【讨论】:

【参考方案3】:

答案实际上取决于您如何处理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。

【讨论】:

谢谢...但此代码不适用于动态更新查询 您能否详细说明您的查询?参数几乎适用于所有查询。我很好奇为什么它们在你的情况下不起作用。【参考方案4】:

这对我有用:

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

基本上,您使用要插入的单引号并将其替换为两个。因此,如果您想插入一串文本('text')并在其周围添加单引号,那就是('''text''')。希望这会有所帮助。

【讨论】:

【参考方案5】:

此答案适用于 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'

【讨论】:

【参考方案6】:

您询问了如何在 SQL Server 中转义 Apostrophe character (')。以上所有答案都很好地解释了这一点。

但是,根据具体情况,Right single quotation mark character (’) 可能是合适的。

(无需转义字符)

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

• 撇号 (U+0027)

Ascii Apostrophe on Wikipedia

• 右单引号 (U+2019)

Unicode Right single quotation on Wikipedia

【讨论】:

以上是关于如何使用单引号 sql server 2005 插入文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中使用单引号?

客户数据中存在单引号,如何插入SQL SERVER

sql server 如何去除双引号

如何将 SQL Server 2005 查询导出到 CSV

SQL Server:如何在表数据中用单引号查找和替换多引号

SQL Server 中的 SQL 注入如何击败转义单引号的卫生设施?