SQL语句匹配任何内容

SQL语句匹配任何内容,sql,replace,match,Sql,Replace,Match,我在SQL语句中为一个类似这样的应用程序使用正则表达式 从id={{REPLACEME}的表中选择* 然而,有时我并没有给出一个参数来替换这个字符串。有没有一种方法可以用任何匹配的东西来代替它。我试过了,但没用 SELECT*FROM-table,其中id=id将匹配具有非nullid 从id=id或id为NULL的表中选择*将匹配所有行 id可能是一个主键,因此您可以使用前者。我只能用一个示例来描述我的解决方案。@AllRec是一个参数: Declare @AllRec bit set @Al

我在SQL语句中为一个类似这样的应用程序使用正则表达式

从id={{REPLACEME}的表中选择*

然而,有时我并没有给出一个参数来替换这个字符串。有没有一种方法可以用任何匹配的东西来代替它。我试过了,但没用

  • SELECT*FROM-table,其中id=id
    将匹配具有非null
    id
  • 从id=id或id为NULL的表中选择*
    将匹配所有行

  • id
    可能是一个主键,因此您可以使用前者。

    我只能用一个示例来描述我的解决方案。
    @AllRec
    是一个参数:

    Declare @AllRec bit
    set @AllRec = {0|1}  --as appropriate
    
    SELECT * 
    FROM table 
    WHERE 
       (
           id = {{REPLACEME}}
           and @AllRec = 0
       ) OR (
           @AllRec = 1
       )
    

    在此解决方案中,如果
    @AllRec
    为1,则返回所有内容,忽略
    id
    过滤器。如果
    @AllRec
    为零,则应用
    id
    过滤器,得到一行。您应该能够快速地将其适应当前的正则表达式解决方案。

    将{{REPLACEME}}替换为

    [someValidValueForYouIdType] OR 1=1
    

    使用Regex Replace选项会导致SQL注入攻击

    假设您的语言支持参数化查询,请尝试Jacob答案的修改版本:

    SELECT * FROM table WHERE (id = @id OR @id IS NULL)
    

    问题是,您必须始终提供@id值。

    不确定您使用的是哪种语言,这段代码让我有些害怕,但是

    
    var statement = "SELECT * FROM table";
    
    If REPLACEME is not empty Then
       statement += " WHERE id = {{REPLACEME}}"
    End If
    
    
    

    这在这种情况下确实有效,但如果谓词变得更复杂,可能会由于运算符优先级而得到不需要的结果。是的,但我假设他希望在没有id的情况下得到所有结果。对我来说这听起来也有点奇怪,但我不会反驳他的商业逻辑。如果找不到任何记录,我只会返回null。我想OP需要一个正则表达式字符串来匹配任何东西。如果他们想把WHERE子句改写成不同的东西,他们可以完全删除它。我不知道这是如何解决问题的。id=id与no WHERE子句相同。。。。(假设非空限制),对吗?我认为OP有一堆选择语句,形式如问题中所示;因为我们需要用某物替换{{REPLACEME}},所以它应该是身份。删除WHERE子句会更好,但这不是OP所要求的。
    SELECT field1, field2
    FROM dbo.yourTable
    WHERE id = isnull(@var, id)