繁体   English   中英

SQL语句完全匹配

[英]SQL Statement Match Anything

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

SELECT * FROM表WHERE ID = {{REPLACEME}}

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

  1. SELECT * FROM table WHERE id = id将匹配所有具有非null id
  2. 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


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM