2016-10-19 31 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} 
関連する問題