【问题标题】:Escape Character in SQL ServerSQL Server 中的转义字符
【发布时间】:2011-07-05 14:47:15
【问题描述】:

我想使用带转义字符的引号。我该怎么办?

我在 SQL Server 中收到错误

字符串后的非右引号。

我正在varchar 变量中编写 SQL 查询,但我收到了该错误:

字符串后的非右引号。

我想使用引号作为转义字符。

【问题讨论】:

标签: sql-server escaping char


【解决方案1】:
WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';

来自: SQL Server Escape an Underscore

【讨论】:

    【解决方案2】:

    如果您想在变量中转义用户输入,您可以在 SQL 中执行如下操作

      Set @userinput = replace(@userinput,'''','''''')
    

    @userinput 现在将在每次出现引号时用一个额外的单引号进行转义

    【讨论】:

      【解决方案3】:

      要逃避',你只需要在前面加上另一个:''

      正如第二个答案所示,可以像这样转义单引号:

      select 'it''s escaped'
      

      结果是

      it's escaped
      

      如果您要将 SQL 连接到 VARCHAR 中执行(即动态 SQL),那么我建议您对 SQL 进行参数化。这样做的好处是有助于防止 SQL 注入,另外意味着您不必担心像这样转义引号(您可以通过加倍引号来实现)。

      例如而不是做

      DECLARE @SQL NVARCHAR(1000)
      SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = ''AAA'''
      EXECUTE(@SQL)
      

      试试这个:

      DECLARE @SQL NVARCHAR(1000)
      SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1'
      EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA'
      

      【讨论】:

      • 为什么这是公认的答案?它没有回答问题。
      • @PeterMoore OP 会使用我答案的第一部分(根据下面的其他答案将引号加倍),或者会使用我推荐的首选方法来构建 SQL 查询在字符串变量中 - 使用参数化 SQL。无论哪种方式,两者都是问题的答案
      • 它没有回答这个问题。有时用户需要 ODBC 连接,这意味着您只能使用纯 SQL。
      • 编辑的答案更清晰,更适合问题
      【解决方案4】:

      您可以在要转义的值之前使用 **\** 字符,例如 insert into msglog(recipient) values('Mr. O\'riely') select * from msglog where recipient = 'Mr. O\'riely'

      【讨论】:

        【解决方案5】:

        为了使代码易于阅读,您可以使用方括号[] 来引用包含' 的字符串,反之亦然。

        【讨论】:

        • 这是不正确的。括号适用于字段、表或模式名称中的非法字符。
        • 是的,没错,它用于对象名称,而不是字符串内容。我必须把问题读错了。
        【解决方案6】:

        您只需将字符串中的' 替换为''

        SELECT colA, colB, colC
        FROM tableD
        WHERE colA = 'John''s Mobile'
        

        如果动态生成 SQL,也可以使用REPLACE(@name, '''', '''''')

        如果要在 like 语句中转义,则需要使用 ESCAPE 语法

        还值得一提的是,如果您不考虑这一点,您就会让自己受到 SQL 注入攻击。更多信息请访问 Google 或:http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F

        【讨论】:

        • 然而 dugokontov 或 RichardPianka 的答案没有任何类似的 -1?
        • @MichaelMunsey 自己尝试一下:select ' 返回错误Unclosed quotation mark after the character string ''。在我的答案中,我没有使用" 仅两个',不知道为什么我的答案是唯一的反对票。
        【解决方案7】:

        您可以定义转义字符,但只能将其与LIKE 子句一起使用。

        例子:

        SELECT columns FROM table
        WHERE column LIKE '%\%%' ESCAPE '\'
        

        在这里它将在整个字符串中搜索%,这就是在SQL Server 中使用ESCAPE 标识符的方式。

        【讨论】:

          【解决方案8】:

          你可以这样转义引用:

          select 'it''s escaped'
          

          结果是

          it's escaped
          

          【讨论】:

          • 这应该是答案。
          【解决方案9】:

          MSSQL 中的转义引号是通过双引号完成的,因此''"" 将分别产生一个转义的'"

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多