SQL pivot查询错误:动态公司名称。错误 - 未闭合的引号

时间:2016-08-17 11:18:22

标签: sql-server sql-server-2008 tsql

我有一个名为Xref的表。 由ShaftecNo, CompNo, CompName列组成。

Xref Table

我正在尝试编写一个透视查询,显示[ShaftecNo],[CompNo],然后[CompName]作为列。导致以下格式

New Pivot Table From Xrefs

我的存储过程中使用的代码如下。

declare @sql nvarchar(max);
-- generate the column names
select @sql = coalesce(@sql + ',', '') + QuoteName([CompName])
from (select DISTINCT CompName from [Xrefs] WHERE CompName LIKE '[a-z]%') T;
-- replace the column names into the generic PIVOT form
set @sql = REPLACE('
select ShaftecNo, :columns:
from (SELECT ShaftecNo,CompNo,CompName FROM Xrefs INNER JOIN Product ON Xrefs.ShaftecNo COLLATE Latin1_General_CI_AS = Product.KeyCode) p 
pivot (max(CompNo) for CompName in (:columns:)) as pv',
':columns:', @sql)
-- execute for the results
exec (@sql)

请注意,如果我将它更改为[a-c](只有[CompName]以a-c范围开头),所使用的LIKE命令将起作用,如果我执行更大的范围,如[a-r]它的错误。

  

Msg 105,Level 15,State 1,Line 4   字符串'ALFAROME'后面的未闭合引号。   Msg 102,Level 15,State 1,Line 4   “ALFAROME”附近的语法不正确。

不同范围的错误会发生变化。如果我完全把这个问题拿出来,那么查询就会起作用,但它会错过公司名称(即.Brake Engineering)。

任何人都可以提供帮助

2 个答案:

答案 0 :(得分:0)

听起来您的CompName字段的值包含单引号,因此在构建@sql值时需要删除/替换它们:

declare @sql nvarchar(max);
-- generate the column names
select @sql = coalesce(@sql + ',', '') + QuoteName(replace([CompName],'''',''))
from (select DISTINCT CompName from [Xrefs] WHERE CompName LIKE '[a-z]%') T;
-- replace the column names into the generic PIVOT form
set @sql = REPLACE('
select ShaftecNo, :columns:
from (SELECT CompNo,replace(CompName,'''''''','''') as CompName FROM a INNER JOIN Product ON Xrefs.ShaftecNo COLLATE Latin1_General_CI_AS = Product.KeyCode) p 
pivot (max(CompNo) for CompName in (:columns:)) as pv',
':columns:', @sql)
-- execute for the results
exec (@sql)

答案 1 :(得分:0)

感谢您的帮助。 PRINT @SQL命令就像一个梦想。 (谢谢Nick.McDermaid)。

问题是一个随机的unicode ascii字符 - 160.我必须使用...

从[Xrefs_Temp]中选择不同的Compname,ASCII(SUBSTRING(Compname,LEN(Compname)-1,LEN(Compname)))。

然后我用空白替换它并且它起作用了。

再次感谢