SQL语句匹配任何东西

时间:2009-10-02 18:36:41

标签: sql replace match

我在我的SQL语句中使用正则表达式,看起来像这样的应用程序

  

SELECT * FROM table WHERE id = {{REPLACEME}}

但是,有时候我没有给出一个参数来替换该字符串。有没有办法用匹配任何东西的东西取而代之。我试过*,但这不起作用。

6 个答案:

答案 0 :(得分:7)

  1. SELECT * FROM table WHERE id = id将匹配所有非空id
  2. 的行
  3. SELECT * FROM table WHERE id = id OR id IS NULL将匹配所有行。
  4. id可能是主键,因此您可以使用前者。

答案 1 :(得分:2)

我只能用一个例子来描述我的解决方案。 @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过滤器并获得一行。您应该能够快速适应当前的正则表达式解决方案。

答案 2 :(得分:2)

将{{REPLACEME}}替换为

[someValidValueForYouIdType] OR 1=1

答案 3 :(得分:1)

使用Regex-Replace选项可以打开SQL注入攻击。

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

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

问题在于你总是必须提供@id值。

答案 4 :(得分:1)

SELECT field1, field2
FROM dbo.yourTable
WHERE id = isnull(@var, id)

答案 5 :(得分:0)

不确定您使用的语言是什么,这段代码让我感到害怕但是......


var statement = "SELECT * FROM table";

If REPLACEME is not empty Then
   statement += " WHERE id = {{REPLACEME}}"
End If