繁体   English   中英

参数在SSMS中起作用,但在SSRS中不起作用

[英]Parameter functioning in SSMS but not SSRS

假设我有以下查询(即时通讯实际使用的简化版本)...

DECLARE @p_ServerName nvarchar(10)
SELECT  SystemName FROM Table_x
WHERE   SystemName = @p_ServerName OR @p_ServerName = 'all'

当我将参数设置为特定名称,例如:DB1时,行显示在SSRS中,但是当我输入“ all”作为参数时,则不显示任何内容。 但是,当我在SSMS中执行相同操作时,它就可以正常工作。

有人知道这里可能有什么问题吗? 谢谢。

编辑

这是我尝试的第一个查询(忽略声明,它仅用于ssms测试,在该测试中效果很好):

DECLARE    @p_ServerName nvarchar(10) = 'all'
DECLARE    @p_Env        nvarchar(10) = 'all'
DECLARE    @p_EnvCat     nvarchar(10) = 'all'

SELECT DISTINCT    
           c1.BlockSize, c1.BootVolume, c1.Compressed, c1.SystemName, c1.Label, c1.Caption, c1.PageFilePresent,
           [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity) AS Capacity,
           [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.FreeSpace) AS [Free Space], 
           [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity - c1.FreeSpace) AS [Used Space],
           100 * c1.FreeSpace / c1.Capacity AS [Free Space %],
           [CLE_ENV_SHORT], [CLE_ENV_CAT_SHORT]

FROM       CCS_Win32_Volume c1

JOIN       [dbo].[CCS_V_SERVER_INSTANCE_DETAILS] c2 on c1.SystemName = c2.CSL_SERVER_NAME

WHERE     (c1.SystemName = @p_ServerName OR c1.SystemName = c1.SystemName)
     AND   (c2.[CLE_ENV_SHORT] = @p_Env OR @p_Env = 'all')
     AND   (c2.[CLE_ENV_CAT_SHORT] = @p_EnvCat OR @p_EnvCat = 'all')

ORDER BY   c2.[CLE_ENV_CAT_SHORT], c2.[CLE_ENV_SHORT]

这是我尝试过的另一个查询(再次忽略声明):

    DECLARE    @p_ServerName nvarchar(10) = 'all'
    DECLARE    @p_Env        nvarchar(10) = 'all'
    DECLARE    @p_EnvCat     nvarchar(10) = 'all'

    SELECT DISTINCT   
           c1.SystemName, c1.BlockSize, c1.BootVolume, c1.Compressed, c1.Label, c1.Caption, c1.PageFilePresent,
           [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity) AS Capacity,
           [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.FreeSpace) AS [Free Space], 
           [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity - c1.FreeSpace) AS [Used Space],
           100 * c1.FreeSpace / c1.Capacity AS [Free Space %],
           [CLE_ENV_SHORT], [CLE_ENV_CAT_SHORT]
    FROM       CCS_Win32_Volume c1
    JOIN       [dbo].[CCS_V_SERVER_INSTANCE_DETAILS] c2 on c1.SystemName = c2.CSL_SERVER_NAME
    WHERE      c1.SystemName = @p_ServerName
         AND   (c2.[CLE_ENV_SHORT] = @p_Env OR @p_Env = 'all')
         AND   (c2.[CLE_ENV_CAT_SHORT] = @p_EnvCat OR @p_EnvCat = 'all')

    UNION

    SELECT DISTINCT    
           c1.SystemName, c1.BlockSize, c1.BootVolume, c1.Compressed, c1.Label, c1.Caption, c1.PageFilePresent,
           [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity) AS Capacity,
           [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.FreeSpace) AS [Free Space], 
           [dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', c1.Capacity - c1.FreeSpace) AS [Used Space],
           100 * c1.FreeSpace / c1.Capacity AS [Free Space %],
           [CLE_ENV_SHORT], [CLE_ENV_CAT_SHORT]
    FROM       CCS_Win32_Volume c1
    JOIN       [dbo].[CCS_V_SERVER_INSTANCE_DETAILS] c2 on c1.SystemName = c2.CSL_SERVER_NAME
    WHERE      @p_ServerName = 'all'
         AND   (c2.[CLE_ENV_SHORT] = @p_Env OR @p_Env = 'all')
         AND   (c2.[CLE_ENV_CAT_SHORT] = @p_EnvCat OR @p_EnvCat = 'all')

   ORDER BY   c2.[CLE_ENV_CAT_SHORT], c2.[CLE_ENV_SHORT], c1.SystemName 

由于查询的多种变体在SSMS中都能正常工作,因此我假设问题在于SSRS如何处理“全部”。 因为当我输入任何服务器名称时,它都能正常工作。 只有“全部”有问题。 所以我想我的问题是,您如何设置参数来做到这一点?

从您的问题尚不清楚,您很难在哪个参数上实现“ ALL”过滤。 但是从您的两个查询来看,它看起来像是@p_ServerName参数。 在您的第一个查询中,其他两个查询似乎已正确完成了“ ALL”过滤。

因此问题必须在这里:

(c1.SystemName = @p_ServerName OR c1.SystemName = c1.SystemName)

首先,您要通过第二部分实现什么? c1.SystemName=c1.SystemName将始终为true(除非c1.SystemName为NULL ,如果这是您的目标,请使用c1.SystemName IS NOT NULL

我认为这应该更像:

(c1.SystemName=@p_ServerName OR @p_ServerName='all')

您是如何实现其他两个参数的,所以也许我遗漏了一些东西。

另外,当您说UNIONed查询解决方案必须是SSRS的工作方式时,我不确定您的意思。 SSRS不会根据参数重写查询,它只是将这些变量中的值粘贴到您的查询中。 如果您的参数@p_ServerName是一个字符串,则它只是其中包含字符“ all”的VARCHAR变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM