gpt4 book ai didi

sql-server - 使用 T-SQL 参数过滤表

转载 作者:行者123 更新时间:2023-12-04 05:55:05 25 4
gpt4 key购买 nike

查看这个简单的存储过程:

getUsers(@name, @age, @city) etc...
  • 如果我过了年龄,只需过滤年龄
  • 如果我为两个参数传递名称和城市过滤器

  • 我知道有一种方法可以构建我的 SQL 语句,然后 EXEC(mySQL)
    但我想做一些类似的事情:
    SELECT * into #tmp From Users WHERE active = 1
    if(@name)
    SELECT * into #tmp From #tmp WHERE name = @name
    if(@age)
    SELECT * into #tmp From #tmp WHERE age = @age
    if(@city)
    SELECT * into #tmp From #tmp WHERE city = @city
    SELECT * From #tmp -- result

    这样我们就可以避免 SQL 注入(inject)。

    最佳答案

    在我看来,在这里使用动态 SQL 会使您更容易受到注入(inject)攻击。尝试:

    select *
    -- into #tmp
    from Users
    where active = 1
    or (@age is not null and age = @age)
    or (@name is not null and name = @name)
    or (@city is not null and city = @city)

    如果您只是返回查询结果,不确定为什么需要临时表?除非您在其他地方使用它。

    关于sql-server - 使用 T-SQL 参数过滤表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9593060/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com