2016-06-08 35 views
0

我是一个新手希望你们可以帮助我。我现在正在查询一个查询,似乎我被这个错误优化器锁提示选项卡住了。我以前没有遇到过这个错误。优化器锁提示选项错误

我遵循本教程从一个网站约SQL Pivot。除了当我使用EXEC sp_executesql运行它时,一切都很完美。我尽我所能来解决这个问题,但没有运气。它是我第一次在SQL服务器中使用Pivot。

请检查下面我的代码:

我正在实现的是,我试图将大约50行到列我的存储过程。

DECLARE @CustFeedCols AS NVARCHAR(4000) 
DECLARE @CustFeedQuery AS NVARCHAR(4000) 

SELECT @CustFeedCols = COALESCE(@CustFeedCols + ',','') + QUOTENAME(custfeed) 
FROM (SELECT DISTINCT TOP 1000 replace(replace(replace(replace(custfeed ,' ',''),'.',''),'-',''),'–','') as custfeed FROM efp_touchCRM.dbo.efp_customertouch 
WHERE custfeed <> '' AND custfeed is NOT null AND custfeed <> 'Sold Sample' 
ORDER BY custfeed) AS custfeed 

SELECT @CustFeedCols 

SET @CustFeedQuery = N'SELECT ' + @CustFeedCols + ' FROM efp_touchCRM.dbo.efp_customertouch PIVOT(GROUPING(custfeed)) FOR custfeed IN (' + @CustFeedCols + ')) AS P' 

SELECT @CustFeedQuery 

EXEC sp_executesql @CustFeedQuery --This is where the error appears. 
            --Incorrect syntax near '('. 

感谢各位的回复!查看第二行提供的错误的编辑代码。谢谢。

感谢。

+0

您是否收到错误信息?什么不在这里? @CustFeedQuery的内容是什么样的? –

+0

嗨Sean Lange!是的,我得到了一个错误,看到代码中的EXEC下面的错误,第二行。谢谢, –

+0

@CustFeedQuery的内容是什么样的?您应该选择或打印您的变量而不是执行它,以便您可以看到要执行的代码。那是错误的地方。 –

回答

0

有例子看看:
https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

-- Pivot table with one row and five columns 
SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, 
[0], [1], [2], [3], [4] 
FROM 
(SELECT DaysToManufacture, StandardCost 
    FROM Production.Product) AS SourceTable 
PIVOT 
(
AVG(StandardCost) 
FOR DaysToManufacture IN ([0], [1], [2], [3], [4]) 
) AS PivotTable; 

在您的代码:

  1. 没有聚集功能
  2. 烦恼与括号

PIVOT 
(
    custfeed <<< 
) <<< 
FOR custfeed IN (
...)) as P 
+0

嗨有Ivan Starostin!感谢您的回复,我现在已经遵循了语法,但是我又遇到了另一个问题。看起来,在PIVOT语法之前,我在'('附近得到了一个错误的语法错误,我不知道为什么,我已经按照上面提到的那样遵循了代码,你能帮我一下吗?谢谢! –

+0

Hi Sorry,我认为它是我的错误,我使用的是SQL Server 2008,而不是2008 R2,而且我也无法将数据库兼容性升级到90,因为我只有70/80兼容性选项可用。数据库太旧,我认为它是语法不适用的原因,那么我会把它留在那里。现在我会开一个新的问题,并找到解决这个问题的另一种方法。不管怎么说,还是要谢谢你!最好的祝福, –