【发布时间】:2015-10-10 04:28:10
【问题描述】:
我有一个包含 4 个参数的 SSRS 报告,其中两个是多值参数(@material 和 @color 在 SQL Server 2008 R2 中使用 VARCHAR(MAX) 数据类型)。我正在使用拆分函数以逗号分隔的形式返回值:
SELECT *
FROM MyView
WHERE height > 200
AND width > 100
AND (
material IN (SELECT Item FROM [dbo].[MySplitFunction] (@material, ',')) OR
color IN (SELECT Item FROM [dbo].[MySplitFunction] (@color, ','))
)
(上面的代码将返回 50 条记录)
这种方法的问题在于,这两个多值参数有大约 1,500 种不同的颜色和材料,会降低性能。有时,返回结果需要超过 40 分钟(视图中的行数约为 600,000)。
我尝试了一种不同的方法,我使用了一个临时表,并在 JOIN 而不是 WHERE 子句中使用它:
SELECT Item
INTO #TempTable
FROM [dbo].[MySplitFunction] (@material, ',')
SELECT *
FROM MyView
INNER JOIN ON MyView.Item = #TempTable.Item
WHERE height > 200
AND width > 100
AND material IN (SELECT Item FROM [dbo].[MySplitFunction] (@material, ','))
(上面的代码只返回 7 条记录,但性能要好得多) 我的问题是如何通过添加另一个 @color 参数并允许 OR 条件使用第二种方法返回相同数量的记录(50 行)?所以在 SSRS 报告中,用户可以多选这两个参数,查询将返回@material = values OR @color = Values。 我对任何其他方法持开放态度,只要它能加快查询速度并允许两个多值参数(@material、@color)的 OR 条件。
谢谢!
【问题讨论】:
-
它是 SQL Server 2008 R2。谢谢!
标签: sql-server-2008-r2 ssrs-2008-r2