我在这里理解查询有困难。 我的查询最终在报表中返回结果集,您可以在参数中指定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)
注意:我的员工表在nvarchar中,而Dimension是varchar但我不认为这很重要,因为连接仍然有效。
现在,我在顶部设置了一个参数进行测试。
这是我的问题:如果我将WHERE
子句切换为WHERE DimP.PersonID IN ('12345')
,我的查询需要3秒才能运行。当我将查询更改为WHERE FullName in (@PM)
时,查询将永远运行;它挂起并运行5+ minuets。有没有人遇到过类似的问题?
结果集生成具有多个"人员的正确数据"我想通过指定一个人而不是id来测试这个,但是当我将参数更改为Name时,查询会挂起..
答案 0 :(得分:1)
可能是参数嗅探。它挂在另一个参数值的优化执行计划上。 在查询结束时尝试使用OPTION(OPTIMIZE FOR(@parm UNKNOWN))。
Declare @PM varchar(30)
Set @PM = 'John Smith'
SELECT....FullName, EmployeeID, ....
FROM...
Inner Join EmployeesT on emp.EmployeeNumber = DimP.PersonID
WHERE FullName in (@PM)
OPTION (OPTIMIZE FOR (@PM UNKNOWN))
答案 1 :(得分:0)
我的同事能够解决这个问题:她使用了`WHERE emp.empNumber =(当emp.FullName IN(@PM)时的情况)
:)