【发布时间】:2014-05-20 13:34:56
【问题描述】:
我正在SSRS中做一个报告,我可以输入参数值并获得结果。但是,我想要的是,例如,如果我输入“全部”,则列出所有服务器,或者列出我输入的特定服务器。
这是 TSQL 更改吗?还是更改 SSRS 参数设置?有人对如何完成此任务有建议吗?
这是我尝试过的:
DECLARE @p_ServerName varchar(10) = 'all'
DECLARE @p_Env nvarchar(10)
DECLARE @p_EnvCat nvarchar(10)
SELECT BlockSize, BootVolume, Compressed, SystemName = @p_ServerName, Label, Caption, PageFilePresent,
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', Capacity) AS Capacity,
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', FreeSpace) AS [Free Space],
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', Capacity - FreeSpace) AS [Used Space],
100 * FreeSpace / Capacity AS [Free Space %],
[CLE_ENV_SHORT], [CLE_ENV_CAT_SHORT]
FROM CCS_Win32_Volume, [dbo].[CCS_V_SERVER_INSTANCE_DETAILS]
WHERE (@p_ServerName = SystemName) OR (@p_ServerName = 'all')
AND [CLE_ENV_SHORT] = @p_Env
AND [CLE_ENV_CAT_SHORT] = @p_EnvCat
使用 all 硬编码的参数,我应该看到所有结果,对吗?但是我没有返回任何结果。
【问题讨论】:
-
你的括号放错了。
(a) or (b) and c and d等于a or (b and c and d),因为and在or之前。您需要(a 或 b)以及 c 和 d。 -
顺便说一句:您正在交叉连接两个表。这是故意的吗?您应该使用最新的语法,即显式连接,例如 INNER JOIN、CROSS JOIN 或其他。
-
您的示例中的其他两个参数是空的,所以它们不会匹配任何列,对吧?这就解释了为什么使用有效的服务器名称可以获得记录,而使用“all”则不会,因为永远不会满足“all”加上其他两个条件。
标签: sql sql-server tsql reporting-services