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列+価格列である別の列を示します。
これは、SQL Serverがこのエラーメッセージで野生のガチョウの追跡をあなたに送るかもしれないと思うのですが、 'JewelleryID'があいまいでないことを確認して、 dbo.fn_Gst(ジュエリー.JewelleryID、10)AS GST'(エイリアスはビュー内で動作するためにも必要です)。しかし、スカラー関数はパフォーマンスを低下させるもので、 'a * b'のような単純なものでは、ビューの列を単純に' Jewellery.Price * 10 AS GST'に変更します。 – GarethD
明示的に関数を使用したい場合や、別の方法で行うことができますか? – etsa
@GarethDにはJewelleryがありません.JewelleryIDが問題でした。私は答えとしてあなたのことをクリックすることはできませんが、それが唯一の応答だったので、あなたがポイントをしたい場合。 – Rick1990