【问题标题】:“Only one expression can be specified in the select list when the subquery is not introduced with EXISTS” error?“当子查询不引入 EXISTS 时,选择列表中只能指定一个表达式”错误?
【发布时间】:2013-11-26 15:21:02
【问题描述】:

我为 ssrs 报告数据集编写了此查询。该报告适用于单个参数值,当为参数选择多个值时会填充错误。

@iteration 是一个多值报告参数。

create table #hftable
( id int ,startdate datetime, environment nvarchar(50), iteration nvarchar(50))
insert #hgtable( id , startdate,environment , iteration)
select distinct wit.id, max(wit.startdate),environment , i.iteration
from Workers wit 
join iteration i 
on wit.sckid=i.sckid
and i.iterationlabel in (@iteration)
where system_rev =(SELECT MAX(system_rev) AS system_rev
              FROM workers 
              WHERE system_id = wit.system_id)
group by wit.id, i.iteration,environment 
order by i.iteration

select count(*) ,environment from #hftable 
group by iteration,environment 
order by iteration 

【问题讨论】:

  • 你能发布错误吗?还有什么数据类型是你的参数?和iterationlabel?
  • @Lamak : 迭代标签是 nvarchar(4000) 数据类型。没有声明参数。错误“当子查询不使用 EXISTS 引入时,选择列表中只能指定一个表达式”
  • 那你需要进入“参数”定义,勾选“多值”选项
  • 他确实说过“@iteration 是一个多值报告参数。”然而?是否允许 NULL 值?可用值从何而来?从映射到iteration.iterationlabel的数据集?
  • @LAMAK 我确实检查了多值选项。

标签: sql sql-server-2008 tsql reporting-services ssrs-2008


【解决方案1】:

此错误与在您用于查找相关值的嵌套查询中返回的列过多有关。例如,这是错误的:

SELECT *
FROM MyTable
WHERE SomeColumn = (SELECT MAX(ThisColumn), MAX(ThatColumn) FROM OtherTable)

嵌套查询必须只返回一列进行比较:

SELECT *
FROM MyTable
WHERE SomeColumn = (SELECT MAX(ThisColumn) FROM OtherTable)

您在显示的查询中没有这个问题,但这就是错误的意思。也许您的报告中有另一个查询可以做到这一点?有时它采取订购的形式:

SELECT *
FROM MyTable
WHERE SomeColumn IN (
    SELECT TOP 10 ThisColumn, COUNT(*) 
    FROM OtherTable 
    GROUP BY ThisColumn 
    ORDER BY COUNT(*) DESC
)

在这种情况下,您仍然可以进行所需的排序,而无需在嵌套查询的列列表中返回 COUNT(*)

【讨论】:

  • 拉塔:感谢您的回复。问题在于以下代码 IF EXISTS (SELECT * FROM tempdb.dbo.SYSOBJECTS WHERE ID = OBJECT_ID(N'tempdb..#hftable')) DROP TABLE #hftable 。删除它,以便报告现在可以正常工作,但无法修复它。
  • 这是我确保桌子不存在的方式。您没有完全限定 DROP 子句中的表名,但这不应该出现此错误。
  • 试试IF EXISTS (SELECT * FROM tempdb.dbo.sysobjects WHERE name = N'#hftable') DROP T4BLE tempdb.dbo.#hftable ...(注意:“TABLE”中有一个 4,因为我认为我的代理正试图阻止 Sql 注入 - 很糟糕)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 2013-06-28
  • 2020-01-24
  • 1970-01-01
  • 2011-09-24
  • 2018-04-14
相关资源
最近更新 更多