我在我的SQL语句中使用正则表达式,看起来像这样的应用程序
SELECT * FROM table WHERE id = {{REPLACEME}}
但是,有时候我没有给出一个参数来替换该字符串。有没有办法用匹配任何东西的东西取而代之。我试过*,但这不起作用。
答案 0 :(得分:7)
SELECT * FROM table WHERE id = id
将匹配所有非空id
SELECT * FROM table WHERE id = id OR id IS NULL
将匹配所有行。 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