0

所以這有點令人困惑。我已經有一個存儲過程。我有5至6個參數的報告。我希望它以這樣的方式運行報表,以便您可以在下拉列表中選擇多個值並保持其可選(不選擇任何值)。其他的事情是我的參數值也有NULL值,我用NA代替它。我嘗試在參數屬性中使用默認值來進行某些選擇,而對於某些選擇它不適用。我仍然是SSRS工作的中間人。任何幫助將不勝感激。 謝謝選擇多值以及參數中具有空值的NULL值

+3

如果你問一個解決您(或其他人)寫的代碼,你可能想發表你有什麼已經讓人們可以幫助您修復或增強它。 – Ram

回答

0

我假設你已經創建了一個函數,並在存儲過程中使用該函數來使該存儲過程成爲多值選擇。

在你的函數中無論哪個變量具有varchar或任何字符串數據類型,它們的大小都會像varchar(max)那樣變成MAX,並且在參數的存儲過程中也做同樣的事情。

此問題背後的原因:當您提供數據類型爲varchar(255)時,它只會取值爲255個字符,如果您的值字符超過了該限制,則會截斷超過該限制的數據。而你正在讓他們多選,所以你可能需要將它們作爲varchar(max)。

還將存儲過程中的參數大小設置爲Max。

注意:Varchar(Max)只是一個例子。您可以爲函數和存儲過程中使用的任何字符串數據類型提供最大值。

讓我知道,如果它的工作原理..

+0

正確。我創建了一個函數,它將從參數中獲取值,並將它們分割爲逗號',',以便每個值都被分隔爲一個值。 – user7902506

+0

但它不能解決我的問題。 – user7902506

+0

你能分享你的功能和存儲過程的代碼嗎? –

0
ALTER PROCEDURE [dbo].[sp_PIMSelect_AJ_Test] 

@network nvarchar(MAX), 
[email protected] nvarchar(MAX), 
[email protected] varchar(MAX), 
[email protected] varchar(MAX), 
[email protected] varchar(MAX), 
[email protected] varchar (MAX), 
@SLG nvarchar(MAX), 
@county nvarchar(MAX), 
@zip nvarchar(Max), 
@specCode nvarchar(Max), 
@affiltype nvarchar(Max), 
@contract nvarchar(Max) 

    AS 

    SET NOCOUNT ON; 

select * from ( 
    select 
distinct P1.Provid as PIMProviderID, 
      P.NetworkName, 
      --COALESCE(pa.affiltype, 'NA') as affiliationtype, 
      PP1.planprovid as ProviderPlanProvID, 
      p1.lastname as ProviderLastName, 
      p1.Firstname as ProviderFirstName, 
      P1.Profdesig as ProviderTitle, 
      p1.intprovtype as ProviderIntProvType, 
      COALESCE(NULLIF(P1.Provtype, ''), 'NA') as ProviderProvType, 
      XP1.Description as ProviderTypeDescription, 
      COALESCE(ps1.specialtycode, 'NA') as ProviderSpecialtyCode, 
      ps1.DirectorySpec as ProviderSpecialityDescription, 
      ps1.spectype as ProviderSpecType, 
      p1.CredType as ProviderCredType, 
      p1.phyaddress1 as ProviderPhyAddress1, 
      p1.phyaddress2 as ProviderPhyAddress2, 
      p1.phycity as ProviderPhyCity, 
      p1.phystate as ProviderPhyState, 
      p1.phyzipcode as ProviderPhyZipCode, 
      p1.phycounty as ProviderPhyCounty, 
      p1.address1 as ProviderMailingAddress1, 
      p1.address2 as ProviderMailingAddress2, 
      p1.city as ProviderMailingCity, 
      p1.state as ProviderMailingState, 
      p1.Zipcode as ProviderMailingZip, 
      p1.county as ProviderMailingCounty, 
      COALESCE(NULLIF(p1.TIN, ''),'0') as ProviderTIN, 
      COALESCE(NULLIF(p1.NPI, ''),'0') as ProviderNPI, 


      pa.Affiltype as AffilType, 
      p.provid as AffilPIMProviderID, 
      PP.planprovid as AffiliationPlanProvID, 
      p.Lastname as AffilLastName, 
      p.Firstname as AffilFirstName, 
      COALESCE(p.intprovtype, 'NA') as AffilIntProvType, 
      XP.Description as AffiliationTypeDescription, 
      ps.specialtycode as AffilSpecialtyCode, 
      ps.spectype as AffilSpecType, 
      ps.directoryspec as AffilSpecialtyDescription, 
      PA.IntDirLocation as AffilDirLocation, 
      p.phyaddress1 as AffilPhyAddress1, 
      p.phyaddress2 as AffilPhyAddress2, 
      p.phycity as AffilPhyCity, 
      p.phystate as AffilPhyState, 
      COALESCE(NULLIF(p.phyzipcode, ''), 'NA') as AffilPhyZipCode, 
      COALESCE(NULLIF(p.phycounty, ''), 'NA') as AffilPhyCounty, 
      p.address1 as AffilMailingAddress1, 
      p.address2 as AffilMailingAddress2, 
      p.city as AffilMailingCity, 
      p.state as AffilMailingState, 
      p.Zipcode as AffilMailingZip, 
      p.county as AffilMailingCounty, 
      COALESCE(NULLIF(p.TIN, ''),'0') as AffilTIN, 
      COALESCE(NULLIF(p.NPI, ''),'0') as AffilNPI, 
      COALESCE(CI.contractid, 'NA') as AffilContractID, 
      COALESCE(C.description, 'NA') as AffilContractDesc 


    from ProviderManager.dbo.Provider p 
    left join ProviderManager.dbo.XProviderTypes XP on P.Provtype = XP.[Provider Type_ID] 
    left join ProviderManager.dbo.planprovinfo PP on P.Provid = PP.provid 
    left join ProviderManager.dbo.provspecialty ps on ps.provid = p.Provid 
    left join ProviderManager.dbo.Affiliation pa on pa.affilid= p.Provid 
    left join ProviderManager.dbo.provider p1 on p1.provid = pa.provid 
    left join ProviderManager.dbo.CredApproval CA on P1.NPI = CA.NPI 
    left join ProviderManager.dbo.planprovinfo PP1 on P1.Provid = PP1.provid 
    left join ProviderManager.dbo.provspecialty ps1 on p1.Provid = ps1.provid 
    left join ProviderManager.dbo.XProviderTypes XP1 on P1.Provtype = XP1.[Provider Type_ID] 
    left join ProviderManager.dbo.contractinfo CI on P1.Provid = CI.provid and P.intprovtype = 'Group' and P.Provid = CI.affilid 
    left join ProviderManager.dbo.Contract C on CI.contractid 
       COLLATE SQL_Latin1_General_CP1_CI_AS = C.contractid COLLATE SQL_Latin1_General_CP1_CI_AS) cte 
    WHERE 
    cte.ProviderIntProvType IN ('Facility', 'Physician') 
    and (cte.NetworkName COLLATE DATABASE_DEFAULT IN (Select Value from VIB_Extracts.dbo.FnSplit(@network, ','))) 
    and (cte.AffilPIMProviderID IN (Select Value from VIB_Extracts.dbo.FnSplit(@SLG, ','))) 
    and (cte.AffilPhyCounty COLLATE DATABASE_DEFAULT IN (Select Value from VIB_Extracts.dbo.FnSplit(@county, ','))OR (@county = 'NA')) 
    and (cte.Affilphyzipcode COLLATE DATABASE_DEFAULT IN (Select Value from VIB_Extracts.dbo.FnSplit(@zip, ',')) OR (@zip = 'NA')) 
    and (cte.ProviderSpecialtyCode COLLATE DATABASE_DEFAULT IN (Select Value from VIB_Extracts.dbo.FnSplit(@specCode, ','))) 
    and (cte.ProviderProvType COLLATE DATABASE_DEFAULT IN (Select Value from VIB_Extracts.dbo.FnSplit(@affiltype, ','))) 
    and (cte.AffilContractID COLLATE DATABASE_DEFAULT IN (Select Value from VIB_Extracts.dbo.FnSplit(@contract, ','))) 
    --and (cte.providerNPI COLLATE DATABASE_DEFAULT IN (Select Value from VIB_Extracts.dbo.FnSplit(@npi,','))) 
    --and (cte.providerTIN COLLATE DATABASE_DEFAULT IN (Select Value from VIB_Extracts.dbo.FnSplit(@TIN,','))) 
    Order by Cte.ProviderLastName 
+0

這是我的代碼 – user7902506

+0

有人可以幫我解決這個問題嗎?我可以提供您需要的所有必要信息。 – user7902506

+0

任何人都可以幫助我,請這? – user7902506

0
USE [VIB_Extracts] 
GO 
/****** Object: UserDefinedFunction [dbo].[FnSplit] Script Date: 4/29/2017 9:59:16 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 


ALTER FUNCTION [dbo].[FnSplit] 
(
@List nvarchar(MAX), 
@SplitOn nvarchar(5) 
) 
RETURNS @RtnValue table 
(

Id int identity(1,1), 
Value nvarchar(100) 
) 
AS 
BEGIN 
While (Charindex(@SplitOn,@List)>0) 
Begin 
Insert Into @RtnValue (value) 
Select 
Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1))) 
Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List)) 
End 

Insert Into @RtnValue (Value) 
Select Value = ltrim(rtrim(@List)) 
Return 
END