SQL Server存储过程的where子句错误

时间:2018-09-22 07:25:19

标签: sql-server stored-procedures

如果有人可以帮助我,我将不胜感激。

另一位程序员编写了以下存储过程。我需要对其进行简单的修改。当前,它查询整个数据库。我需要将其限制为在特定日期之后创建的记录。我想在哪里对字段stop_details.record_created>“ 9/1/18'

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[StopVisitsByCustomer]
AS
BEGIN
    DECLARE @CUSTOMERNAMES AS VARCHAR(MAX), -- TO FETCH THE UNIQUE CUSTOMER NAME FOR THE PIVOTING
            @SQLQRY AS VARCHAR(MAX) -- FOR HOLDING DYNAMIC SQL

    SELECT @CUSTOMERNAMES = STUFF((SELECT ',' + QUOTENAME(CUSTOMER_NAME)
                                   FROM CUSTOMERS
                                   GROUP BY CUSTOMER_NAME
                                   ORDER BY CUSTOMER_NAME
                                   FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

    -- DYNAMIC SQL FOR THE PIVOT QUERY TO RETURN THE DETAILS IN THE DESIRED FORMAT
    SET @SQLQRY = 'SELECT 
                       CON_NAME AS ConName,
                       CON_ADDRESS1 AS Address1,
                       CON_ADDRESS2 AS Address2,
                       CON_CITY AS City,
                       CON_STATE AS State,
                       CON_ZIP AS Zip, ' + @CUSTOMERNAMES + ' 
                   FROM 
                       (SELECT  
                            CON_NAME,
                            CON_ADDRESS1,
                            CON_ADDRESS2,
                            CON_CITY,
                            CON_STATE,
                            CON_ZIP,
                            CUSTOMER_ID, 
                            CUSTOMER_NAME
                        FROM 
                            STOP_DETAILS
                        INNER JOIN
                            CUSTOMERS ON CUSTOMERS.ID = STOP_DETAILS.CUSTOMER_ID) Stops
            PIVOT 
                (COUNT(CUSTOMER_NAME)
                 FOR CUSTOMER_NAME in (' + @CUSTOMERNAMES + ')
                ) Customers'

    -- EXECUTE THE DYNAMIC SQL FOR GIVING THE OUTPUT
    EXECUTE(@SQLQRY);
END

我尝试将where子句放在几个位置,但是不断出现错误。

提前谢谢...

1 个答案:

答案 0 :(得分:1)

根据您的请求,您似乎会在WHERE之后添加INNER JOIN。另请注意,由于这是一个动态查询,因此您必须将引号加倍:

INNER JOIN  CUSTOMERS ON CUSTOMERS.ID = STOP_DETAILS.CUSTOMER_ID
WHERE stop_details.record_created > ''2018-09-01'') Stops