【问题标题】:Parse a single quote in parameter which is used in a dynamic SQL statement解析动态 SQL 语句中使用的参数中的单引号
【发布时间】:2019-09-06 17:26:19
【问题描述】:

我有一个接受字符串用户名的存储过程。它使用动态 SQL 语句。

默认情况下,SQL 将“Examp'le”转换为“Exam”'le',但它仍然无法转换为 nvarchar,因为它应该是 'Examp''''le' 才能在那里工作。

有没有什么方法可以在没有字符串操作的情况下用 4 替换两个引号。

下面是我想要实现的示例查询

我希望参数的值为Examp'le

'select * from 
tablename where name = ' + '''' + CAST(@parameter AS  nvarchar(254)) + ''''

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:

    最好用sp_executesql,试试这个:

    DECLARE @Parameter NVARCHAR(254) = 'Value xyz...'
    
    EXEC sp_executesql N'SELECT * FROM tablename AS t WHERE t.Name = @1',
    N'@1 NVARCHAR(254)',
    @Parameter
    

    优点是:第一更安全,第二你没有计算报价的问题;)

    如需更多信息,请查看: https://blogs.msdn.microsoft.com/turgays/2013/09/17/exec-vs-sp_executesql/

    如果您想要多个参数,请查看我的帖子: How to optimize a query with multiple OR, AND, IN statements?

    【讨论】:

      【解决方案2】:

      您应该先用双引号替换单引号。 如果您的参数中没有单引号,则不会替换任何内容。

      SET @Parameter = REPLACE(@Parameter, '''', '''''')
      
      ' SELECT * FROM tablename WHERE name = ''' + @parameter + ''' '
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-31
        • 1970-01-01
        • 2012-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多