我在我的 SQL 语句中为一个看起来像这样的应用程序使用了正则表达式
SELECT * FROM table WHERE id = {{REPLACEME}}
但是,有时我没有提供一个参数来替换该字符串。有没有办法用匹配任何东西的东西替换它。我试过*,但这不起作用。
SELECT * FROM table WHERE id = id
将匹配所有非空的行id
SELECT * FROM table WHERE id = id OR id IS 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 值。
SELECT field1, field2
FROM dbo.yourTable
WHERE id = isnull(@var, id)
不知道你使用什么语言,这段代码让我害怕,但是......
var statement = "SELECT * FROM table";
If REPLACEME is not empty Then
statement += " WHERE id = {{REPLACEME}}"
End If