簡體   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