解决以下错误信息"Unclosed quotation mark after the character string"

Solve the following error message "Unclosed quotation mark after the character string"

下面是我在其中创建并插入值的table:

CREATE TABLE prod_sales   
(saleID int identity(1,1),   
saleDate date,  
department varchar(125),   
amount int )  
GO   
  
INSERT INTO prod_sales VALUES   
('2016-01-01','Men''s Clothing & Accessories' ,ROUND(RAND() * 1000, 0)),  
('2016-01-02','Phones & Telecommunications',ROUND(RAND() * 1000, 0)),  
('2016-01-01','Computer & Office',ROUND(RAND() * 1000, 0)),  
('2016-01-02','Consumer Electronics',ROUND(RAND() * 1000, 0)),  
('2016-01-01','Men''s Clothing & Accessories' ,ROUND(RAND() * 1000, 0)),  
('2016-01-02','Phones & Telecommunications',ROUND(RAND() * 1000, 0)),  
('2016-01-01','Computer & Office',ROUND(RAND() * 1000, 0)),  
('2016-01-01','Consumer Electronics',ROUND(RAND() * 1000, 0)),  
('2016-01-01','Men''s Clothing Accessories' ,ROUND(RAND() * 1000, 0)),  
('2016-01-02','Phones & Telecommunications',ROUND(RAND() * 1000, 0)),  
('2016-01-02','Computer & Office',ROUND(RAND() * 1000, 0)),  
('2016-01-01','Consumer Electronics',ROUND(RAND() * 1000, 0))  
GO 

SELECT * FROM prod_sales

我的目标是使用 Dynamic PIVOT 显示各个部门每天的销售额总和,查询结果应该如下所示下面的截图:

为了实现我的目标,我创建了一个动态 PIVOT 存储过程,如下所示:

CREATE OR ALTER PROCEDURE DynamicPivot
@ColumnToPivot VARCHAR(50),
@ListToPivot VARCHAR(50)
AS
BEGIN
DECLARE @SqlStatement VARCHAR(MAX)
SET @SqlStatement =
'SELECT saleDate,[Computer & Office],[Consumer Electronics],[Men''s Clothing & Accessories],[Phones & Telecommunications]
FROM
(
 SELECT saleDate,department,amount
 FROM prod_sales
) AS DataSource
PIVOT
(
 SUM(amount)
 FOR ['+@ColumnToPivot+'] IN ('+@ListToPivot+')
) AS Pivoting'
EXECUTE (@SqlStatement)
END

EXECUTE DynamicPivot 'department','[Computer & Office],[Consumer Electronics],[Men''s Clothing & Accessories],[Phones & Telecommunications]'

存储过程已成功创建,但在执行存储过程后显示错误消息,如下所示:

如何解决这个问题?

问题与单引号无关,问题是当您显然需要更多字符时将字符串设置为 50 个字符:

@ListToPivot VARCHAR(50)

尝试:

@ListToPivot varchar(4000)

另外,为什么存储过程 hard-code 是您作为参数传入的列的列表?这也解决了这个问题: