【发布时间】:2016-04-19 15:19:32
【问题描述】:
我很难理解这里的查询。 我的查询最终会在报告中返回一个结果集,您可以在其中在参数中指定一个 Person 来查看他们的数据。 我将 Dimension 表加入到 Employee 表中,以从 Employee 表中返回 Name。它看起来像这样
Declare @PM varchar(30)
Set @PM = 'John Smith'
SELECT....FullName, EmployeeID, ....
FROM...
Inner Join EmployeesT on emp.EmployeeNumber = DimP.PersonID
WHERE FullName in (@PM)
注意:我的 Employee 表在 nvarchar 中,Dimension 是 varchar,但我认为这并不重要,因为连接仍然有效。
现在,我在顶部设置了一个参数进行测试。
这是我的问题:如果我将 WHERE 子句切换为 WHERE DimP.PersonID IN ('12345'),我的查询需要 3 秒才能运行。当我将查询更改为WHERE FullName in (@PM) 时,查询将永远运行;它挂起并运行了 5 个以上的小步舞曲。有没有人遇到过类似的问题?
结果集生成了包含多个“人”的正确数据,我想通过指定一个人而不是 id 来测试这一点,但是当我将参数更改为 Name 时,查询挂起..
【问题讨论】:
-
性能问题更多与表结构和索引有关。另外,如果您只传递一个名字,为什么不简单地输入“WHERE FullName = @PM”?
-
我试过这个并且遇到了同样的问题。通过在下面添加以下 CASE 语句解决了该问题。我不知道为什么
-
我不确定 case 语句是否正确,因为它似乎没有返回任何内容。您可能应该在问题中发布完整的查询。此外,性能问题可能是由错误的执行计划造成的。请参阅此处的讨论:brentozar.com/archive/2014/06/…
标签: sql-server tsql reporting-services