【发布时间】:2019-07-10 09:07:40
【问题描述】:
这是我的函数,它只返回欧洲的价格
ALTER FUNCTION [prices].[UDF_Fn_IsPriceAvailable]
(@Product NVARCHAR(100),
@Region NVARCHAR(100))
RETURNS NVARCHAR(100)
BEGIN
RETURN
(SELECT ISNULL(PRICE, 0) AS PRICE
FROM [dbo].[tblPricesEurope]
WHERE product = @Product
END
现在的问题是我的函数应该根据地区返回价格。
我有两张桌子
- [dbo].[tblPricesEurope]
- [dbo].[tblPricesAsia]
我的 SQL 技能不太好。我无法根据地区返回价格?
我试过了,但我一直收到这个错误
函数中包含的最后一条语句必须是返回语句。
ALTER FUNCTION [prices].[UDF_Fn_IsPriceAvailable]
(@Product NVARCHAR(100),
@Region NVARCHAR(100))
RETURNS NVARCHAR(100)
BEGIN
IF (@Region = 'Europe')
BEGIN
RETURN
(SELECT ISNULL(PRICE, 0) AS PRICE
FROM [dbo].[tblPricesEurope]
WHERE product = @Product)
END
ELSE IF (@Region = 'Asia')
BEGIN
RETURN
(SELECT ISNULL(India,0) AS PRICE
FROM [dbo].[tblPricesAsia]
WHERE product = @Product)
END
END
【问题讨论】:
-
为什么一开始就有两张桌子?为什么不只有一个带有 Region 列的?还有为什么你的函数在选择价格后返回
NVARCHAR(100)? -
@Sami 两个表的列结构都不同,我想要一个 nvarchar 因为我只是打印值
-
更好的是让函数返回正确类型的值,让函数的调用者进行转换。这样你的函数会更好地重用
-
您的
PRICE列是什么数据类型??
标签: sql-server sql-server-2008 sql-server-2012