2016-10-25 4 views
0

У меня есть эта хранимая процедура (я didn't это сделать):Query перестает работать после добавления поля

USE [RA_DB] 
GO 
/****** Object: StoredProcedure [dbo].[GetLogWasteReport] *******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[GetLogWasteReport] 
    -- Add the parameters for the stored procedure here 
    @IdLogWaste int, 
    @initDate DateTime, 
    @endDate DateTime 
AS 
BEGIN 
SET FMTONLY OFF 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    SELECT lwd.Manifest 
,SUM(CASE WHEN lwd.Manifest IS NULL THEN 0 ELSE lwd.Quantity END) AS TOTAL 
    ,COUNT(lwd.Id) AS Count 
    INTO #TEMPTotal 
FROM [dbo].[LogWaste] lw (NOLOCK) 
    INNER JOIN [dbo].[LogWasteDetail] lwd (NOLOCK) 
     ON lw.Id = lwd.IdLogWaste 
--WHERE 
--   lw.Id = @IdLogWaste 
WHERE 
lwd.OutputDate IS NOT NULL 
AND 
lwd.IdWaste = @IdLogWaste 
AND 
lwd.OutputDate BETWEEN @initDate AND @endDate 
GROUP BY lwd.Manifest 



SELECT 
    w.Name AS Waste 
    ,a.Description AS Area 
    ,lwd.Quantity 
    , CONVERT(VARCHAR(12),lwd.InitDate,101) AS InitDate 
    , CONVERT(VARCHAR(12),lwd.OutputDate,101) AS OutputDate 
    ,lwd.Balance 
    ,lwd.Manifest 
    ,temp.TOTAL 
    ,temp.Count 
    FROM [dbo].[LogWaste] lw (NOLOCK) 
    INNER JOIN [dbo].[LogWasteDetail] lwd (NOLOCK) 
     ON lw.Id = lwd.IdLogWaste 
    INNER JOIN [dbo].[Waste] w (NOLOCK) 
     ON lwd.IdWaste = w.Id 
    INNER JOIN [dbo].[Area] a (NOLOCK) 
     ON a.Id = lwd.IdArea 
    INNER JOIN #TEMPTotal temp 
     ON lwd.Manifest = temp.Manifest OR (lwd.Manifest IS NULL AND temp.Manifest IS NULL) 
    --WHERE 
     -- lw.Id = @IdLogWaste 
    WHERE 
     lwd.OutputDate IS NOT NULL 
     AND 
     lwd.IdWaste = @IdLogWaste 
     AND 
     lwd.OutputDate BETWEEN @initDate AND @endDate 
    ORDER BY lwd.Manifest,lwd.InitDate 


    DROP TABLE #TEMPTotal 



END 

То, что я хочу сделать, это добавить поле «BranchOfficeId», что я могу получить от [LogWaste] (есть BranchOfficeIdFk), что мне нужно сделать, чтобы выбрать этот магазин в этом магазине? я пытаюсь что-то вроде

USE [SA_DB] 
GO 
/****** Object: StoredProcedure [dbo].[GetLogWasteReport] ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[GetLogWasteReport] 
    -- Add the parameters for the stored procedure here 
    @IdLogWaste int, 
    @initDate DateTime, 
    @endDate DateTime, 
    @branchOfficeId Int 
AS 
BEGIN 
SET FMTONLY OFF 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    SELECT lwd.Manifest 
,SUM(CASE WHEN lwd.Manifest IS NULL THEN 0 ELSE lwd.Quantity END) AS TOTAL 
    ,COUNT(lwd.Id) AS Count 
    INTO #TEMPTotal 
FROM [dbo].[LogWaste] lw (NOLOCK) 
    INNER JOIN [dbo].[LogWasteDetail] lwd (NOLOCK) 
     ON lw.Id = lwd.IdLogWaste 
--WHERE 
--   lw.Id = @IdLogWaste 
WHERE 
lwd.OutputDate IS NOT NULL 
AND 
lwd.IdWaste = @IdLogWaste 
AND 
lwd.OutputDate BETWEEN @initDate AND @endDate 
GROUP BY lwd.Manifest 



SELECT 
    w.Name AS Waste 
    ,a.Description AS Area 
    ,lwd.Quantity 
    , CONVERT(VARCHAR(12),lwd.InitDate,101) AS InitDate 
    , CONVERT(VARCHAR(12),lwd.OutputDate,101) AS OutputDate 
    ,lwd.Balance 
    ,lwd.Manifest 
    ,lw.BranchOfficeId 
    ,temp.TOTAL 
    ,temp.Count 
    FROM [dbo].[LogWaste] lw (NOLOCK) 
    INNER JOIN [dbo].[LogWasteDetail] lwd (NOLOCK) 
     ON lw.Id = lwd.IdLogWaste 
    INNER JOIN [dbo].[Waste] w (NOLOCK) 
     ON lwd.IdWaste = w.Id 
    INNER JOIN [dbo].[Area] a (NOLOCK) 
     ON a.Id = lwd.IdArea 
    INNER JOIN #TEMPTotal temp 
     ON lwd.Manifest = temp.Manifest OR (lwd.Manifest IS NULL AND temp.Manifest IS NULL) 
    --WHERE 
     -- lw.Id = @IdLogWaste 
    WHERE 
     lwd.OutputDate IS NOT NULL 
     AND 
     lw.BranchOfficeId = @branchOfficeId 
     AND 
     lwd.IdWaste = @IdLogWaste 
     AND 
     lwd.OutputDate BETWEEN @initDate AND @endDate 
    ORDER BY lwd.Manifest,lwd.InitDate 


    DROP TABLE #TEMPTotal 



END 

Но didn't работы, мой запрос всегда возвращает значение 0, может кто-нибудь мне помочь?

Запрос (до):

result = context.GetLogWasteReport(id, initDate, endDate).ToList(); 

запросов (после):

result = context.GetLogWasteReport(id, initDate, endDate, branchOfficeId).ToList(); 

Примечание: перед тем, как добавить полевые работы branchOfficeId запроса и получить значения

ответ

0

Держу пари, ваш @branchOfficeId не является правильно настроиться и подходит как 0. Я бы удостоверился, что он настроен на то, что, по вашему мнению, он настроен.

Если ваше намерение разрешить нулевое значение указывает отсутствие выбора, просто обновите предложение where where.

(@branchOfficeId=0 OR lw.BranchOfficeId = @branchOfficeId) 

Если позволяет нулевой ...

(@branchOfficeId IS NULL OR lw.BranchOfficeId = @branchOfficeId) 
+0

Но значение не равно нулю, таблица отходов имеют значение в каждом branchOfficeId, почему это может пришел нуль? – Dawin

0

Вы не получаете никаких результатов, потому что нет ни одного совпадения. Вероятно, это потому, что значение равно NULL.

Если это проблема, вы можете исправить это с:

(lw.BranchOfficeId = @branchOfficeId or @branchOfficeId is NULL) 
+0

Но значение не равно null, таблица Waste имеет значение в каждой ветвиOfficeId, почему она может быть нулевой? – Dawin

+0

У вас есть исходный код вызывающей службы? Я предлагаю вам установить точку останова в этой строке -> result = context.GetLogWasteReport (id, initDate, endDate, branchOfficeId) .ToList(); а затем проследите, насколько сможете, в свои вызовы данных. Существует, вероятно, отсутствующее сопоставление где-то между слоями. –

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