0

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

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

但是,有时我没有提供一个参数来替换该字符串。有没有办法用匹配任何东西的东西替换它。我试过*,但这不起作用。

4

6 回答 6

7
  1. SELECT * FROM table WHERE id = id将匹配所有非空的行id
  2. SELECT * FROM table WHERE id = id OR id IS NULL将匹配所有行。

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

于 2009-10-02T18:39:10.083 回答
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应用过滤器并获得一行。您应该能够快速适应您当前的正则表达式解决方案。

于 2009-10-02T18:40:08.493 回答
2

将 {{REPLACEME}} 替换为

[someValidValueForYouIdType] OR 1=1
于 2009-10-02T18:40:28.177 回答
1

使用 Regex-Replace 选项会使您面临 SQL 注入攻击。

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

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

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

于 2009-10-02T18:43:55.690 回答
1
SELECT field1, field2
FROM dbo.yourTable
WHERE id = isnull(@var, id)
于 2009-10-02T18:51:10.293 回答
0

不知道你使用什么语言,这段代码让我害怕,但是......


var statement = "SELECT * FROM table";

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


于 2009-10-02T18:46:22.627 回答