Как интерпретировать неверный синтаксис ошибки T-SQL рядом - PullRequest
0 голосов
/ 11 октября 2018

Я не совсем понимаю, как интерпретировать сообщения об ошибках T-SQL относительно номеров строк и «Batch Start Line».

Когда я пытаюсь запустить CREATE PROCEDURE, я получаю следующееошибки:

Сообщение 102, уровень 15, состояние 1, процедура LoadIndexersReports, строка 119 [Строка пакетного запуска 9]
Неверный синтаксис рядом с ')'.

Сообщение 102,Уровень 15, состояние 1, процедура LoadIndexersReports, строка 120 [Batch Start Line 9]
Неверный синтаксис рядом с ')'.

Когда я перехожу к строке 119, это код, который, как я знаю, долженхорошо, потому что я скопировал код, поэтому я решил закомментировать весь блок.

Я все еще получаю ту же ошибку, но все строки вокруг 119 фактически закомментированы.

Как я должен это интерпретировать?

Есть какие-нибудь подсказки о странном способе, которым T-SQL сообщает об ошибках?

Возможно, я смогу разобраться с этим и выяснить, в чем проблема.

Это не таквопрос.

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

Вот полный код, вставленный в первую строку 1с оператором [USE]:

USE [QtyCompare]
GO

/****** Object:  StoredProcedure [dbo].[LoadRecentlyIndexed]    Script Date: 10/10/2018 1:01:02 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[LoadIndexersReports] 
     @StartDate DATE, @DaysForward INT
AS
BEGIN
    SET NOCOUNT ON

    --  IF OBJECT_ID('dbo.TempRecentlyIndexedRaw'U') IS NOT NULL 
    DELETE FROM dbo.TempRecentlyIndexedRaw

    DECLARE @pLastModified DATETIME,
            @pPONO VARCHAR(50),
            @pProduct VARCHAR(100),
            @pQuantity VARCHAR(15),
            @pHeat VARCHAR(25),
            @pProduct_Description VARCHAR(250),
            @pSerial_Or_Lot VARCHAR(50),
            @pCoreData_IID_ssField14 INT,
            @pDocId INT,
            @pIndexers VARCHAR(200),
            @pAR_Alpha VARCHAR(50),
            @pValve BIT,
            @tempString VARCHAR(500),
            @pARs VARCHAR(250)   /*sorted ALPHABETICALLY, ASCENDING ... Note:  ABC234 > ABC1111, because its sorted ALPHABETICALLY */

    -- If Documents were deleted, remove them from your ocean
    DELETE IH
    FROM IndexHistory IH
    LEFT JOIN IndexedLineItems LI ON IH.Docid = LI.DocId
    WHERE LI.DocId IS NULL

    -- *************************************************************************************
    -- * B.
    -- PULL FROM RAW, CREATE TempRecentlyIndexed
    -- 
    -- *************************************************************************************

    IF OBJECT_ID('dbo.TempRecentlyIndexed', 'U') IS NOT NULL 
         DROP TABLE dbo.TempRecentlyIndexed;

    SELECT * 
    INTO TempRecentlyIndexed 
    FROM IndexHistory 
    WHERE LastModified >= @StartDate 
      AND [LastModified] <= CAST(DATEADD(dd, @DaysForward - 1, GETDATE()) AS DATE)

-- *************************************************************************************
    -- * C.  Generate your reports from TempRecentlyIndexed
    -- 
    -- 
    -- *************************************************************************************

    --lines summary
    SELECT 
        Indexers, SUM(LinesIndexed) AS [Total Lines Indexed], 
        SUM(LinesFactoringInValvesTTLHeats) AS [Total Lines Indexed Factoring In Valves (Multiple Heats)]  
    FROM
        (SELECT
             Indexers, AR_Alpha, 
             COUNT(*) AS LinesIndexed, SUM([Heat Items]) AS LinesFactoringInValvesTTLHeats 
         FROM
             (SELECT 
                  LastModified, PONO, Product, Quantity, 
                  IIF(Charindex('Valve Heats', Heat) > 0, CAST(Replace(Heat, ' Valve Heats', '') AS INT), 1) AS [Heat Items], 
                  DocId, Indexers, AR_Alpha 
              FROM
                  [dbo].[TempRecentlyIndexed] 
              WHERE
                  product IS NOT NULL) AS AAA
         GROUP BY 
             AR_Alpha, Indexers) PreviousQuery
    GROUP BY
        Indexers
    ORDER BY
        Indexers

    --documents
    Select Indexers, Count(*) as [Documents Indexed] from 
    (
    Select distinct Docid, Indexers from [dbo].[TempRecentlyIndexed] where Product is not null
    ) as AAA
    group by Indexers
    order by Indexers

    --lines detail
    select Indexers, AR_Alpha, Count(*) as [Lines Indexed], Sum([Heat Items]) as [Total Lines Indexed Factoring In Valves (Multiple Heats)] from 
    (
    SELECT LastModified, PONO, Product, Quantity, IIF(Charindex('Valve Heats',Heat)>0,Cast(Replace(Heat,' Valve Heats','') as int),1) as [Heat Items], DocId, Indexers, AR_Alpha from [dbo].[TempRecentlyIndexed] where product is not null
    ) as AAA
    group by AR_Alpha, Indexers 
    order by Indexers, AR_Alpha




-- *************************************************************************************
    -- * D.  Generate summaries for comparison with Arrivals data
    -- 
    -- 
    -- *************************************************************************************

    -- Recently Indexed Summary
--  IF OBJECT_ID('dbo.TempRecentlyIndexedSummary', 'U') IS NOT NULL 
--    DROP TABLE dbo.TempRecentlyIndexedSummary;
--
--  select LastModified, Product, sum(CASE WHEN ISNUMERIC(Quantity + 'e0') = 1 THEN CAST(Quantity AS float) ELSE 0 END) AS Quantity, Indexers, AR_Alpha, ARs
--  into TempRecentlyIndexedSummary
--  from TempRecentlyIndexed
--  where product is not null
--  Group by LastModified,Product,INdexers,AR_Alpha,ARs


-- *************************************************************************************
    -- * D2.  Load Related Records
    -- 
    -- 
    -- *************************************************************************************


    Delete from dbo.TempRelatedIndexedRaw
    Delete from dbo.TempRelatedIndexed
    SELECT distinct ARs into #ARList FROM [dbo].[IndexHistory] WHERE [LastModified] <= cast( dateadd(dd,@DaysForward-1,@StartDAte) as date) AND [LastModified] >= @StartDate)
    Select * into TempRelatedIndexed from IndexHistory left Join #ARList on IndexHistory.ARs = #ARList.ARs where Not([LastModified] <= cast( dateadd(dd,@DaysForward-1,@StartDAte) as date) AND [LastModified] >= @StartDate))



    -- Summary to include both recently indexed and related indexed
    IF OBJECT_ID('dbo.TempIndexedSummary', 'U') IS NOT NULL 
      DROP TABLE dbo.TempIndexedSummary;

    Select Product, Sum(Quantity) as Quantity, AR_Alpha, ARs into TempIndexedSummary from
    (Select * from TempRecentlyIndexedSummary
    Union All
    Select * from TempRelatedIndexedSummary) CombinedSummaries
    group by Product, AR_Alpha, ARs 


    --exec [dbo].[LoadRecentlyIndexedARSets]


    --Arrival Summary
    IF OBJECT_ID('dbo.TempArrivalSummary', 'U') IS NOT NULL 
      DROP TABLE dbo.TempArrivalSummary;

    Select AProdNo as Product, Sum(QTY) as Quantity, ARs into TempArrivalSummary from
    (
    select RA.*, ARSets.[Set] as ARs from 
    (Select * from Raw_Arrival Union All Select * from Arrivals_2017 ) RA
    left join [IndexHistoryARSets] ARSets on RA.ARsupp = ARSets.AR 
    where RA.TrueBOSTK = 'STK' and (ARSets.[Set] is not null)
    ) Arrivals
    group by AProdNo, ARs


    -- *************************************************************************************
    -- * E.  Generate DISCREPENCY report based on summary
    -- 
    -- 
    -- *************************************************************************************

    --Generate Discrepency Report
    select Coalesce(TAS.Product,'<No Data>') as Arrival_Product, Coalesce(TAS.ARs,'<No Data>') Arrival_ARs, Coalesce(TAS.Quantity ,0) as Arrival_Qty, Coalesce(TIS.Quantity  ,0) as Indexed_Qty, Coalesce(TIS.Product   ,'<No Data>') as Ndx_Product, Coalesce(TIS.ARs ,'<No Data>') as Ndx_ARs,
    Coalesce((Select top 1 Indexers from TempRecentlyIndexed TRI where TRI.ARs = TIS.ARs), '<No Data>')
    from
    TempArrivalSummary TAS FULL OUTER JOIN TempIndexedSummary TIS
    on TAS.Product = TIS.Product and TAS.ARs = TIS.ARs


    -- *************************************************************************************
    -- * E.  Generate Pivot table data
    -- 
    -- 
    -- *************************************************************************************

    --THIS IS YOUR PIVOT SET FOR HARSHAL
    Select PivotMain.*, Coalesce(PivotAdditional.Country,'Unknown') as Country, Coalesce(PivotAdditional.[Assigned Indexer], 'Undefined') as [Assigned Indexer], Replace(Coalesce(PivotAdditional.Automated,''),'X','YES') as Automated, Coalesce(PivotAdditional.Domestic,'') as Domestic, PivotAdditional.[Line Items Recieved To Date] as [Relative Volume] from
    (Select Indexers, 1 as Lines, iif(Charindex('Valve Heats', Coalesce(Heat,''), 0)>0,Cast(RTrim(LTrim(Replace(Heat,'Valve Heats',''))) as int),1) as [Lines Factoring In Valves], Docid, LastModified, AR_Alpha as Supplier, iif(Charindex('.', AR_Alpha)=2,RIGHT(ar_ALPHA,LEN(ar_aLPHA)-2),AR_Alpha) as Suffix, ARs from [dbo].[TempRecentlyIndexed]) PivotMain
    left join Suffix PivotAdditional on (PivotMain.Supplier = PivotAdditional.Supplier and PivotMain.Suffix = PivotAdditional.Suffix)



End
GO

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Когда у нас много кода, возможно, в этих случаях у нас может быть ошибка синтаксиса.

Более простой способ получить ошибку - дважды щелкнуть мышью по ошибке, и SQL Management приведет вас кСтрока, которую вы должны проверить независимо от номера строки.

enter image description here

0 голосов
/ 11 октября 2018

Номера строк в ошибках очень часто не совпадают между окном запроса SSMS и тем, что сообщает интерпретатор SQL.Интерпретатор сообщает номер строки относительно оператора, выполняемого в пакете.Если у вас есть несколько пакетов (как правило, разделенных GO), например, номер строки в исключении будет отличаться от номера строки, отображаемого в окне запроса.

В SSMS вы можете дважды щелкнуть посообщение об ошибке на панели результатов и SSMS наведут курсор на оператор, вызвавший ошибку.

В вашем примере строка с ошибкой выглядит так:
SELECT distinct ARs into #ARList FROM [dbo].[IndexHistory] WHERE [LastModified] <= cast( dateadd(dd,@DaysForward-1,@StartDAte) as date) AND [LastModified] >= @StartDate)

У этого утверждения слишком много ).Удалите один в конце, чтобы исправить синтаксис в этой строке.Также обратите внимание, что у следующего оператора та же проблема.Вам нужно исправить оба утверждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...