Microsoft SQL Server 2005 を使用しています
レポートを生成するためのストアド プロシージャを作成しました。
ASP.NET from は、ストアド プロシージャのパラメーターを渡すために使用されます。
問題は、パラメータに選択されたすべての PartNumber を取得していないことです。225 個の PartNumber のみを取得し、それらの partNumber のみのレポートを生成しますが、実際には 700 個を超える PartNumber があります。
パラメータのサイズを拡張できる他の方法はありますか?
SQL Server 2008 にはさらにサイズ制限がありますか?
この「@sqlQuery nvarchar(4000)」変数を XML 変数に格納する方法はありますか?
4000 は nvarchar の最大サイズです (拡張しようとしたため、4000 以上は受け入れられません)。Xml 変数には制限がありません。
パラメーター値の例 (ASP.NET から渡される)
PartNumber
314013
314039
314047
314054
314062
314070
314088
314096
314104
314344
314351
314377
314393
ストアド プロシージャ
USE [Reportbox]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spCreateReport2]
(@prod nvarchar(4000))
AS
BEGIN
DECLARE @sqlQuery nvarchar(4000)
declare @intMonth nvarchar(2)
declare @intMonth1 nvarchar(2)
declare @intMonth2 nvarchar(2)
declare @intMonth3 nvarchar(2)
declare @intMonth4 nvarchar(2)
declare @intMonth5 nvarchar(2)
SELECT @intMonth = fiscalmonth FROM FiscalWeeks WHERE CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME) between weekstart and weekend
if @intmonth-1<=0 BEGIN set @intmonth1=@intmonth-1+12 END else set @intMonth1=@intMonth-1
if @intmonth-2<=0 BEGIN set @intmonth2=@intmonth-2+12 END else set @intmonth2=@intmonth-2
if @intmonth-3<=0 BEGIN set @intmonth3=@intmonth-3+12 END else set @intmonth3=@intmonth-3
if @intmonth-4<=0 BEGIN set @intmonth4=@intmonth-4+12 END else set @intmonth4=@intmonth-4
if @intmonth-5<=0 BEGIN set @intmonth5=@intmonth-5+12 END else set @intmonth5=@intmonth-5
Set @sqlQuery =
'select distinct d.PROD80, DESC80, SUM_AVGU80, AVGU80, SUM_ONHA80, d.ONHA80, SUM_SAFE80, d.SAFE80,
MAX_FOQT80, MAX_ABCC80, MAX_MINQ80,
SUM_WEEK_NO_PO, SUM_TRIG80, d.TRIG80, SUM_BQTY80, DQTY80, OQTY80,
CASE WHEN d.AVGU80<>0 THEN CAST(ROUND(d.ONHA80/d.AVGU80,0) AS INT) ELSE 0 END AS WKS30
FROM DI80ACT00 d INNER JOIN vwDataAtCompanyLevel v on (d.prod80=v.prod80)
LEFT OUTER JOIN DI80ACT01 t on (d.prod80=t.prod80) and t.ware80 <> ''30''
WHERE d.prod80 in (' + @prod + ') and d.prod80<>''HLW54B'' and d.ware80=''30''
GROUP BY d.PROD80, DESC80, SUM_AVGU80, AVGU80, SUM_ONHA80, d.ONHA80, SUM_SAFE80, d.SAFE80,
MAX_FOQT80, MAX_ABCC80, MAX_MINQ80,SUM_HSTA80,SUM_HSTB80,SUM_HSTC80,SUM_HSTD80,SUM_HSTE80,SUM_HSTF80,SUM_POOR80,POOR80,SUM_TWIN80,SUM_WEEK_No_PO,SUM_TRIG80,TRIG80,SUM_BQTY80,DQTY80,OQTY80'
exec(@sqlQuery)
END
任意のヘルプまたは詳細は非常に役立ちますありがとう