0

我正在使用浮点值表,但我按参数输入列

从 ListVal 中选择 AVG(@var) 作为 Aver

当我输入列名(参数)时,我收到一个错误:数据类型 nvarchar 对 avg 运算符无效。但是所有的列都是浮动的。

帮助!!!请

4

2 回答 2

4

您必须使用动态 SQL

例如

EXEC( 'SELECT AVG( [' + @var + '] ) AS Aver FROM ListVal' )
于 2009-09-24T16:07:14.027 回答
2

查询参数替代单个文字值,而不是列名。这是标准的 SQL 行为,在每个品牌的 RDBMS 中都支持相同的行为。

所以你提供了一个列的名称,就好像你运行了这个查询:

SELECT AVG('columnname') ...

这是一个毫无意义的操作。什么AVG()是字符串?

@Matt Rogish 在他的回答中是正确的,即使列名(或表名或其他 SQL 语法)动态化的唯一方法是使用动态 SQL。即,将应用程序变量插入字符串,然后将生成的字符串用作 SQL 查询。

您只能使用查询参数来注入单个标量值,这就是参数在查询中的解释方式。

于 2009-09-24T16:10:00.297 回答