2017-04-04 13 views
1

私はGSTを計算する関数を持っています。select文の中の関数を使って新しい列を作成する

CREATE FUNCTION [dbo].[fn_Gst] 
(
     @JewelleryID int, 
     @GstRate float 
) 
RETURNS FLOAT 
AS 
BEGIN 
     DECLARE @Gst float 
      SET @Gst = (SELECT Jewellery.Price * @GstRate 
         FROM Jewellery 
         WHERE JewelleryID = @JewelleryID) 

     RETURN @Gst 
END 

Select dbo.fn_gst(JewelleryID,0.1) AS GST 
from Jewellery 

私は現在ビューを作成しようとしていますが、最初にselect文を実行しています。

ここまでは私のコードです。

SELECT Sales.SaleID, Sales.SaleDate, Customers.FirstName, 
     Customers.LastName, Categories.Category, 
     Jewellery.Description, Types.Type, Jewellery.Year, 
     Jewellery.Price, dbo.fn_Gst(JewelleryID, 10) 

FROM Sales 
INNER JOIN Customers ON Customers.CustomerID = Sales.CustomerID 
INNER JOIN Categories ON Customers.CategoryID = Categories.CategoryID 
INNER JOIN JewellerySales ON Sales.SaleID = JewellerySales.SaleID 
INNER JOIN Jewellery ON Jewellery.JewelleryID = JewellerySales.JewelleryID 
INNER JOIN Types ON Jewellery.TypeID = Types.TypeID 

明らかにそれがスローとしてdbo.fn_Gst(JewelleryID, 10)が正しくありません「コラム 『DBO』またはユーザー定義関数または集計のいずれかを見つけることができない、または名前があいまいです。関数はスカラーなので、値を返すだけです。

しかし、どこに行くのが問題なのか分かりません。

最終結果私はGSTを表示する別の列、次にGST列+価格列である別の列を示します。

+1

これは、SQL Serverがこのエラーメッセージで野生のガチョウの追跡をあなたに送るかもしれないと思うのですが、 'JewelleryID'があいまいでないことを確認して、 dbo.fn_Gst(ジュエリー.JewelleryID、10)AS GST'(エイリアスはビュー内で動作するためにも必要です)。しかし、スカラー関数はパフォーマンスを低下させるもので、 'a * b'のような単純なものでは、ビューの列を単純に' Jewellery.Price * 10 AS GST'に変更します。 – GarethD

+0

明示的に関数を使用したい場合や、別の方法で行うことができますか? – etsa

+0

@GarethDにはJewelleryがありません.JewelleryIDが問題でした。私は答えとしてあなたのことをクリックすることはできませんが、それが唯一の応答だったので、あなたがポイントをしたい場合。 – Rick1990

答えて

0

3ヶ所を変更します。「[タイプ]」へ

「年」変更「[年]」に

「タイプ」の変更を

dbo.fn_Gst(Jewellery.JewelleryID 、10)AS GST

関連する問題