2013-12-26 3 views
1

У меня есть существующая хранимая процедура, которая принимает два однозначных параметра. Теперь у меня есть требование изменить один из его параметров, чтобы принять несколько значений. Я изменил хранимую процедуру, как показано ниже.Передача параметра с несколькими значениями в хранимую процедуру

CREATE PROCEDURE [dbo].[GetSpecificationsM1] 
@EntityType NVARCHAR(100) 
,@EntityId BIGINT 

    AS 


    DECLARE @EntityTypeId AS BIGINT 


    SET @EntityTypeId=ISNULL((SELECT ID 
        FROM [ObjectTypes] WHERE [Type][email protected]),0) 



    SELECT ISNULL([Specifications].[Id],0) AS [SpecificationId] 
    ,ISNULL([Specifications].[Measure],'') AS [Measure] 
    ,ISNULL([Specifications].[Notes],'') AS [Notes] 
    ,ISNULL([UOM].[UOM],'') As UOM 
    ,ISNULL(SpecificationsTemplate.Name,'') As Specification 
    ,ISNULL(SpecificationsTemplate.Id, 0) AS SpecificationTemplateId 
    ,ISNULL(Specifications.EntityId, 0) AS EntityId 
    ,(CASE WHEN ISNULL([SpecificationsTemplate].FieldTypeId,0)=0 
    THEN 8 ELSE [SpecificationsTemplate].FieldTypeId END) AS [FieldTypeId] 
    ,ISNULL(SpecificationsTemplate.ListId,0) AS ListId 
    ,ISNULL([Specifications].[ListItemId],0) AS [ListItemId] 
    FROM [SpecificationsTemplate] LEFT OUTER JOIN [Specifications] 
    ON [SpecificationsTemplate].[Id]=[Specifications].[SpecificationTemplateId] 

    AND [Specifications].[EntityTypeId][email protected] 
    LEFT OUTER JOIN [UOM] ON [SpecificationsTemplate].[UOMId]=[UOM].[Id] 
    WHERE [Specifications].[EntityId] IN (@EntityId) 

    GO 

В приведенном выше коде я модифицировал @EntityId, чтобы принять несколько значений в последней строке кода. Но я получаю ошибку, поскольку не могу преобразовать Varchar в BigINt, когда я пытаюсь передать несколько значений в параметр как @ EntityId = 9,10,11.

Просьба помочь мне с решением.

Спасибо!

+0

Параметр должен быть единственным значением. Почему вы проходите 9,10,11. По мне проблема здесь. Покажите нам, как вы вызываете хранимую процедуру. –

+0

Можете ли вы изменить свою программу на цикл данных в параметр? – vasin1987

+0

@AnoushkaSeechurn Я использую эту хранимую процедуру в своем отчете SSRS. Мне нужна хранимая процедура для возврата значений для нескольких идентификаторов сущностей. Я создал параметр в своем отчете SSRS, который позволяет многозначное значение, и я передал этот параметр этой хранимой процедуре. – user1699025

ответ

1

В хранимой процедуре изменения параметра, когда условие что-то вроде ниже

Например:

WHERE ([CostCentre]) collate database_default IN(SELECT Value FROM dbo.FnSplit(@CostCentre,',')) 

Полный код:

ALTER PROCEDURE [dbo].[SomeSP] 
    @CostCentre NVARCHAR(255) 
AS 
    SELECT 
     [ProjectCode],[ProjectName], [ProjectManager],SUM([Hours]) AS [Hours MTD] 
    FROM dbo.Rpt_NRMA_CATS NC 
    INNER JOIN PeriodID P ON NC.PeriodID = P.PeriodID 
    WHERE 
     ([CostCentre]) collate database_default IN (SELECT Value FROM dbo.FnSplit(@CostCentre, ',')) 
+1

Я получаю сообщение об ошибке Тип выражения bigint недействителен для предложения COLLATE. – user1699025

0

Просто изменить ваш где условие

WHERE [Specifications].[EntityId] IN (select item from dbo.fnSplit(@EntityId)) 

Код функции fnSplit: here

Смежные вопросы