【问题标题】:SQL where in using parameter [duplicate]SQL在哪里使用参数[重复]
【发布时间】:2012-06-28 10:35:27
【问题描述】:

我正在尝试使用 sql 中的参数来获得“在哪里”工作。

SELECT * FROM tablename WHERE(name IN (@names))

所以我在 sqlmanager 中执行 SQL,并在被要求输入时在 @name 值中输入“Name1”、“Name2”。这样,查询返回 0 行。但如果我将 SQL 更改为:

SELECT * FROM tablename WHERE(name IN ('Name1','Name2'))

有效。

让它发挥作用的诀窍是什么?

这篇文章为我解决了这个问题:Link to post 感谢所有回复:)

【问题讨论】:

  • 快速测验 - 命名 任何 编程语言,如果您传递单个参数,它将检查该参数的内部,找出逗号,拆分逗号,然后从那时起,就好像提供了多个参数一样对待所有事情?

标签: sql-server-2008 asp.net-4.0


【解决方案1】:

请试试这个..

Declare @names varchar(150)
Set @names = '''Name1'',''Name2'''
Declare @str varchar(max) 
set @str = 'SELECT * FROM tablename WHERE(name IN ('+@names+'))'
Execute(@str)

【讨论】:

  • 如果名称列表包含Bobby Tables,这很容易受到SQL注入的影响
  • Sql 注入是不可能的,因为这里@names 是Sql 存储过程中的参数。
  • 仅仅因为@names是一个参数并不能神奇地保护你免受SQL注入,如果你然后通过字符串连接构造一个非参数化的动态SQL查询并执行它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 2013-10-20
相关资源
最近更新 更多