2016-10-19 3 views
-1

해당 공급 업체 ID를 가져와 해당 공급 업체의 이름과 모든 송장의 합계를 인쇄하는 저장 프로 시저 spSumInvoices을 생성하려고합니다.왜이 ')'오류가 발생 했습니까?

IF OBJECT_ID ('spSumInvoices') IS NOT NULL 
    DROP PROC spSumInvoices; 
GO 

CREATE PROC spSumInvoices 
    @FindVen int, 
    @InvoiceTotal Money, 
    @VenName VARCHAR 
AS 
BEGIN 
    SELECT 
     @FindVen, SUM(InvoiceTotal) AS 'Total', @VenName 
    FROM 
     Vendors,Invoices 
    WHERE 
     Invoices.VendorID = @FindVen 
    GROUP BY 
     @InvoiceTotal 
END 

PRINT 'Vendor' + @VenName 
PRINT 'Has an invoice total of $' + CONVERT(VARCHAR,@InvoiceTotal); 

나는이 오류를 얻을 : 내가 저장 프로 시저에 새로 온 사람의 권리 경우

는 확실하지 내가 사용하고있는 코드입니다

Msg 164, Level 15, State 1, Procedure spSumInvoices, Line 15
Each GROUP BY expression must contain at least one column that is not an outer reference.

+0

'CONVERT'에 대상 데이터 형식 매개 변수가 없습니다. 당신은'VendorName'에 그것을 필요로하지 않기 때문에 그것을 완전히 제거해야합니다. – Filburt

+0

만약 내가이 오류를 제공 varchar 될 데이터 형식을 넣어 : 이름이 "VenderName"이 컨텍스트에서 허용되지 않습니다. 유효한 표현식은 상수, 상수 표현식 및 (일부 컨텍스트에서) 변수입니다. 열 이름은 허용되지 않습니다. @Filburt –

+0

VenderName, SUM (InvoiceTotal)'을 선택하면 안됩니다. 'Vendername'이 어디에서 발생하는지 분명하지 않습니다. – Filburt

답변

0

이 질문에 대한 답이었다 : {USE AP; IF OBJECT_ID ('spSumInvoices')가 NULL이 아니면 DROP PROC spSumInvoices; GO

CREATE PROC spSumInvoices 
@FindVen int 



AS 
BEGIN 
DECLARE @VenName Varchar(50); 
SET @VenName =(SELECT VendorName FROM Vendors WHERE VendorID = @FindVen); 
DECLARE @InvoiceTotal money; 
SET @InvoiceTotal = (SELECT SUM(InvoiceTotal) FROM Invoices WHERE 
VendorID = @FindVen); 


SELECT @VenName,@InvoiceTotal 
FROM Vendors,Invoices 
WHERE Invoices.VendorID = @FindVen 

END 

PRINT 'Vendor ' + @VenName 
PRINT 'Has an invoice total of $' + CONVERT(VARCHAR,@InvoiceTotal); 
enter code here} 
관련 문제