SivaKrishna Lavidi Ответов: 3

как выполнить хранимую процедуру в sql с несколькими параметрами


CREATE PROCEDURE sp_fuelmargin @storeid varchar(50),@fromdate datetime,@todate datetime

AS

select storeid,businessDate,fuelGrade,fuelGradeDesc,SUM(sales) as Sales,sum(Volume)as Volume from FuelSaleSummary where storeid in (@storeid ) and businessDate between @fromdate and @todate
group by StoreId,businessDate,fuelGrade,fuelGradeDesc
order by StoreId
GO

EXEC sp_fuelmargin 'tx001-strb,TX000-IFFI','2014-01-01','2014-05-30'


в приведенном выше storeprocedure содержать поле storeid,fromdate,todate в сочетании параметров я хочу сдать 2 магазина идентификаторы в параметр поле storeid, когда выполнение storeprocedure как выше инструкции exec, но я не получаю данные, пожалуйста, помогите мне как пройти 2 идентификаторы в один параметр

King Fisher

Есть какие-нибудь ошибки?

3 Ответов

Рейтинг:
20

King Fisher

После выполнения этой функции плюнет в тебя ДБ:

create FUNCTION [dbo].[Split]
(
    @String NVARCHAR(4000),
    @Delimiter NCHAR(1)
)
RETURNS TABLE 
AS
RETURN 
(
    WITH Split(stpos,endpos) 
    AS(
        SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos
        UNION ALL
        SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1)
            FROM Split
            WHERE endpos > 0
    )
    SELECT 'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)),
        'Data' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos)
    FROM Split
)


и измените свой Sp вот так,
alter PROCEDURE sp_fuelmargin @storeid varchar(50),@fromdate datetime,@todate datetime
 
AS
 
select storeid,businessDate,fuelGrade,fuelGradeDesc,SUM(sales) as Sales,sum(Volume)as Volume from FuelSaleSummary where storeid in (select data from dbo.split(@storeid,',')) and businessDate between @fromdate and @todate
group by StoreId,businessDate,fuelGrade,fuelGradeDesc
order by StoreId
GO


теперь exec ваш Sp:
EXEC sp_fuelmargin 'tx001-strb,TX000-IFFI','2014-01-01','2014-05-30'


Рейтинг:
13

Prakriti Goyal

Вы можете использовать переменную таблицы и передать ей значения идентификатора хранилища, а затем использовать ее в дальнейшем.

Надеюсь, это вам поможет!! :)


Рейтинг:
11

Sprint89

Вы можете передать только столько параметров, сколько вы объявили в sproc. Чтобы сделать то что вы хотите вам нужно будет передать список StoreIds в виде одной строки и проанализировать его прежде чем вы доберетесь до SELECT