选择表中的所有内容...使用where语句

时间:2013-08-18 02:08:16

标签: sql sql-server sql-server-2008 tsql

我有一个有趣的情况,我正在尝试选择sql server表中的所有内容,但我只需要通过旧的公司API而不是SQL来访问该表。此API要求提供表名,字段名和值。然后以这种方式插入它非常简单:

select * from [TABLE_NAME_VAR] where [FIELD_NAME_VAR] = 'VALUE_VAR';

我无法将=符号更改为!=或其他任何内容,只有那些变量。我知道这听起来很糟糕,但是我不能在不经过大量工作的情况下更改API,这就是我必须要做的事情。

此表中有多个列都是数字,所有字符串,并设置为非null。是否有值我可以通过此API函数返回表中的所有内容?也许是一个常数或特殊值,这意味着它是一个数字,它不是数字,它是一个字符串,*,它不是空的等等?有什么想法吗?

4 个答案:

答案 0 :(得分:5)

如果API构造正确,则无法做到这一点。

然而,如果这是一些本土生物,它可能不是。您可以尝试输入YourTable]--作为TABLE_NAME_VAR的值,以便在插入查询时最终为

select * from [YourTable]--] where [FIELD_NAME_VAR] = 'VALUE_VAR';

如果]被拒绝或正确转义(通过加倍),这将无效。

答案 1 :(得分:2)

这是一个简单的例子, 希望它可以帮助

declare @a varchar(max)
set @a=' ''1'' or 1=1 '

declare @b varchar(max)
set @b=('select * from [TABLE_NAME_VAR] where [FIELD_NAME_VAR]='+@a)
exec(@b)

答案 2 :(得分:2)

如果您的API允许列名而不是常量,

select * from [TABLE_NAME_VAR] where [FIELD_NAME_VAR] = [FIELD_NAME_VAR] ;

答案 3 :(得分:2)

您可能会尝试传递此VALUE_VAR

1'' or ''''=''

如果它按原样使用并作为动态SQL执行,则应该导致

SELECT * FROM tab WHERE fieldname = '1' or ''=''