首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询错误-括起来的引号和不正确的语法

SQL查询错误-括起来的引号和不正确的语法
EN

Stack Overflow用户
提问于 2017-05-04 09:34:47
回答 1查看 422关注 0票数 0

我们的程序中有一个查询,这是一位前同事创建的。

自2015年创建以来,这个查询每个月都很正常,但是今天它出现了错误,我们这里没有SQL专家。

错误:

代码语言:javascript
复制
1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Unclosed quotation mark after the character string 'SALES PROMOT'. 2). [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near 'SALES PROMOT'.  'Document' (RDOC)

查询:

代码语言:javascript
复制
DECLARE @listCol VARCHAR(8000)
DECLARE @Query VARCHAR(8000)
DECLARE @OINV VARCHAR(8000)
DECLARE @ORIN VARCHAR(8000)
DECLARE @From varchar(15)
DECLARE @To varchar(15)
Set @From =/* SELECT convert(varchar(15),Max(T0.DocDate),112) FROM OINM T0 WHERE T0.DocDate > */ convert(varchar(15),'[%0]',112)
Set @To =/* SELECT convert(varchar(15),Max(T0.DocDate),112) FROM OINM T0 WHERE T0.DocDate > */ convert(varchar(15),'[%1]',112)
 
 
SET @OINV =  isnull( STUFF((Select  ',' + convert(varchar(10),Docentry) from OINV
  where CANCELED <>'N' FOR XML PATH('')),1,1,'') ,0)
SET @ORIN =  isnull(STUFF((Select  ',' + convert(varchar(10),Docentry) from ORIN
  where CANCELED <>'N' FOR XML PATH('')),1,1,'') ,0)
SELECT  @listCol = STUFF(( SELECT DISTINCT '],[' + ltrim((ItmsGrpNam)) from OITB
ORDER BY '],[' + ltrim((ItmsgrpNam)) FOR XML PATH('') ), 1, 2, '') + ']'
 
SET @Query = 'Select *  from (Select T0.CardCode, T0.CardName, T6.[GroupName], T4.ItmsGrpNam,sum(T1.LineTotal) as Sal from
OINV T0 Inner join INV1 T1 on T0.DocEntry = T1.DocEntry
Inner Join OFPR T2 on T2.AbsEntry = T0.FinncPriod
Inner Join OITM T3 Inner Join OITB T4 On T4.ItmsGrpCod = T3.ItmsgrpCod on T1.ItemCode = T3.ItemCode Inner Join OCRD T5 On T5.CardCode=T0.CardCode inner join OCRG T6 On T6.[GroupCode]=T5.[GroupCode]
Where convert(varchar(15),T0.Docdate,112) >= convert(varchar(15),'+@From+',112)
and convert(varchar(15),T0.Docdate,112) <= convert(varchar(15),'+@To+',112)
and t0.docentry not in ('+@OINV+')
group by T0.CardName ,T4.ItmsGrpNam,T0.CardCode, T6.[GroupName]
 
union all
 
Select T0.CardCode, T0.CardName, T6.[GroupName], T4.ItmsGrpNam,sum(-T1.LineTotal) as Sal from
ORIN T0 Inner join RIN1 T1 on T0.DocEntry = T1.DocEntry
Inner Join OFPR T2 on T2.AbsEntry = T0.FinncPriod
Inner Join OITM T3 Inner Join OITB T4 On T4.ItmsGrpCod = T3.ItmsgrpCod on T1.ItemCode = T3.ItemCode Inner Join OCRD T5 On T5.CardCode=T0.CardCode inner join OCRG T6 On T6.[GroupCode]=T5.[GroupCode]
Where convert(varchar(15),T0.Docdate,112) >= convert(varchar(15),'+@From+',112)
and convert(varchar(15),T0.Docdate,112) <= convert(varchar(15),'+@To+',112)
and t0.docentry not in ('+@ORIN+')
group by T0.CardName ,T4.ItmsGrpNam, T0.CardCode, T6.[GroupName]

 
) src
PIVOT (sum(Sal) for ItmsgrpNam IN ('+@listCol+')) AS pvt'
EXECUTE (@Query)

有人能建议我如何开始解决这个问题,或者在代码中看到任何明显的错误吗?

EN

回答 1

Stack Overflow用户

发布于 2017-05-07 23:37:32

此查询所做的是在@query中构建一个动态查询字符串,该字符串将在最后执行。在查询的某个地方,它添加了一个具有未关闭引号的值。

EXEC(@query)不同,您可以使用SELECT @query返回动态查询字符串,检查它,找出它出错的地方,并修复有问题的记录。

我猜是OITB.ItmsGrpNam中的项目组名称之一,其中有一个引号,需要正确删除或转义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43779141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档