2011-08-04 44 views
-1

爲什麼我的程序給我:不正確的語法在程序

Msg 156, Level 15, State 1, Procedure CountAantalModules, Line 10 
Incorrect syntax near the keyword 'AS'. 

,當我試圖改變它?

USE [SomaData] 
GO 
/****** Object: StoredProcedure [dbo].[CountAantalModules] Script Date: 08/04/2011 15:09:09  ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[CountAantalModules] 
(
@prodorder as int, 
@result int output 
) 
AS 
SET NOCOUNT ON; 

SELECT @result = COUNT(ORD.ORDERNUMMER) AS AantalModuleOrders 
FROM  Kostenposten AS KP 
INNER JOIN Orders AS ORD ON ORD.Ordernummer = KP.Ordernummer 
WHERE ((KP.KPNR = '170' AND KP.SOORT='LadeFront' OR KP.SOORT='GlasLadeFront') OR 
(KP.KPNR = '250' AND KP.SOORT='LadeFront')) AND ORD.PRODUCTIEORDER = (@prodorder) 

回答

2

您正在設置一個變量並嘗試同時選中它。

我認爲不是:

SELECT @result = COUNT(ORD.ORDERNUMMER) AS AantalModuleOrders 

你可能只是意味着:

SELECT COUNT(ORD.ORDERNUMMER) AS AantalModuleOrders 

或者可能:

SELECT @result = COUNT(ORD.ORDERNUMMER) 
+0

這是他的輸出變量,那麼或許應該刪除該別名,而不是變量賦值 –

+0

@Derek,非常真實的,我已經更新了答案。 – jzd

4

其分配到(輸出)變量,因此不能因爲它不是結果集中的列,所以會被別名化。

0

也許你需要周圍的AantalModuleOrders引號,因爲它是一個字符串(要命名的列方式):

SELECT COUNT(ORD.ORDERNUMMER) AS 'AantalModuleOrders'

+0

謝謝Tjekkles,但我刪除了AantalModuleOrders,因爲我沒有真正需要它在我的SP中,它是我最初的查詢字符串中剩餘的。感謝所有的迴應! –

1

擺脫AS AantalModuleOrders。你想在@resultcount(*)的價值,這樣你就不需要給列一個別名,因爲在技術上沒有列

1

我不知道的別名AantalModuleOrders是否有必要,我會建議取消別名使用下面的語句:

SELECT @result = COUNT(ORD.ORDERNUMMER)