2016-06-08 48 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兼容性選項可用。數據庫太舊,我認爲它是語法不適用的原因,那麼我會把它留在那裏。現在我會開一個新的問題,並找到解決這個問題的另一種方法。不管怎麼說,還是要謝謝你!最好的祝福, –