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

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

【问题讨论】:

  • 但是在现有的单引号中添加另一个单引号会在将数据保存到另一个表时产生问题,例如:插入 table1(select * from table2)

标签: sql sql-server-2005 quotes quotations


【解决方案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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-05
          • 2013-10-17
          相关资源
          最近更新 更多