基本SQL语句返回错误

时间:2018-05-24 07:50:14

标签: sql

我是SQL新手,我不断收到以下SQL语句的错误:

SELECT Id,Name
FROM {PositionInCompany}
WHERE @AdvancedFilter

目前我只测试AdvancedFilter的默认情况,因此设置为" 1 = 1"并应返回PositionInCompany中的所有名称和ID。 如果我简单地将" 1 = 1" in,但不是如果我使用变量(具有完全相同的字符串值)。

附加了错误。 我错过了什么?

科尔

enter image description here

3 个答案:

答案 0 :(得分:1)

这可能是因为你说它是一个字符串,将转换为:

SELECT Id,Name FROM {PositionInCompany} WHERE '1=1'

sql会把它读作一个字符串,它不会知道它可以执行。 您可以将AdvancedFilter的值更改为其他内容

@AdvancedFilter = 'test'
SELECT Id,Name FROM {PositionInCompany} WHERE 'test'=@AdvancedFilter

或使用某些东西动态构建查询

答案 1 :(得分:1)

SQL中的参数是数据的占位符。如果它们包含SQL代码,则该代码将被数据库忽略并被视为数据 这就是为什么你不能发送SQL块作为参数,这也是你不能参数化标识符的原因。

如果需要动态where子句,则需要使用动态SQL,但这通常会带来性能和安全性方面的成本。

但是,我怀疑你当前的SQL是错误的,假设FROM {PositionInCompany}意味着你将表名连接到sql字符串(只是假设,因为你没有提供任何信息来显示)

如果我的假设是正确的,你需要停止这样做,阅读SQL injection and how parameterized queries protects you from it,并了解这种形式的连接也容易受到SQL注入攻击。

在SQL中,不要寻找快捷方式。为特定表编写特定查询。这是唯一安全的方法,99.9%的时间表现最佳。

答案 2 :(得分:0)

感谢您的回复。

我在Outsystems中这样做,但我认为这是一个简单的SQL问题。 但是,只需要选择“扩展内联”选项以插入字符串语句。它现在工作正常。

的问候, 科尔