[ad_1]
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'
上記のストアプロシージャにはstoreid、fromdate、todateパラメータが含まれています。storeidパラメータに2つのストアIDを渡したいのですが、上記のEXECステートメントのようにストアプロシージャを実行するとデータが取得できません。2つのIDを1つのパラメータに渡す方法を教えてください。
解決策 3
DB でこの Spit 関数を実行します。
SQL
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を次のように変更します。
SQL
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
次に Sp を実行します。
SQL
EXEC sp_fuelmargin 'tx001-strb,TX000-IFFI','2014-01-01','2014-05-30'
解決策 5
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 ) 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_fuelmargin 'tx001-strb,TX000-IFFI','2023-10-10','2023-12-12'
解決策 2
テーブル変数を使用してストア ID の値を渡すと、それをさらに使用できます。
これがお役に立てば幸いです!! 🙂
解決策 1
sproc で宣言した数だけパラメータを渡すことができます。 希望することを行うには、SELECT に到達する前に StoreId のリストを単一の文字列として渡し、それを解析する必要があります。
[ad_2]
コメント