Sql server 表值函数中的If-Else语句
我有一张桌子Sql server 表值函数中的If-Else语句,sql-server,Sql Server,我有一张桌子 ProdID, ProdName, Price 我想在表值函数中使用if-else语句,这样,如果数量大于或等于10,我会给10%的折扣,否则不给折扣。这是我的密码 Create function FDiscount (@ProdName varchar(50), @Qty int) Returns Table as return IF (@Qty >= 10) Select ProdName, Price, @Qty as Qty, Price
ProdID, ProdName, Price
我想在表值函数中使用if-else语句,这样,如果数量大于或等于10,我会给10%的折扣,否则不给折扣。这是我的密码
Create function FDiscount (@ProdName varchar(50), @Qty int)
Returns Table
as
return
IF (@Qty >= 10)
Select ProdName, Price, @Qty as Qty, Price * @Qty as Total,
(Price * @Qty) - (Price * @Qty) /100 * 10 as Discount10
from TblProduct
Else
Select ProdName, Price, @Qty as Qty, Price * @Qty as Total
from TblProduct
Where ProdName = @ProdName
select * from FDiscount('Milk','10')
但是它说“关键字'IF'附近的语法不正确,我似乎找不到任何解决方法。”
用这个
Create function FDiscount (@ProdName varchar(50), @Qty int)
Returns @tblTable(ProdName VARCHAR(100), Price INT, Qty INT, Discount10 INT)
as
BEGIN
IF @Qty >= 10
INSERT INTO @tbl
Select ProdName, Price, @Qty , Price * @Qty,
(Price * @Qty) - (Price * @Qty) /100 * 10
from TblProduct
Else
INSERT INTO @tbl
Select ProdName, Price, @Qty , Price * @Qty , 0
from TblProduct
Where ProdName = @ProdName
return
END
为什么不是一个简单的
案例
语句
CREATE FUNCTION Fdiscount (@ProdName VARCHAR(50),
@Qty INT)
returns TABLE
AS
RETURN
(SELECT prodname,
price,
@Qty AS Qty,
price * @Qty AS Total,
CASE
WHEN @Qty >= 10 THEN ( price * @Qty ) - ( price * @Qty ) / 100 * 10
ELSE 0
END AS Discount10
FROM tblproduct
WHERE prodname = @ProdName)
有两件事…#1函数必须返回相同数量的列,无论提供了什么参数值。因此,您不能基于@Qty打开和关闭折扣列。#2多语句函数(mTVF)的性能往往很差。您应该尝试将函数设置为内联函数(iTVF)。
请参阅以下建议的重写
CREATE FUNCTION dbo.FDiscount (@ProdName varchar(50), @Qty int)
RETURNS TABLE WITH SCHEMABINDING AS
RETURN
SELECT
p.ProdName,
p.Price,
Qty = @Qty,
Total = p.Price * @Qty,
Discount10 = IIF(@Qty >= 10, (p.Price * @Qty) - (p.Price * @Qty) / 100 * 10, 0)
FROM
dbo.TblProduct p
WHERE
p.ProdName = @ProdName;
GO
嗯,,
Jason这就是程序所说的“具有返回值的返回语句不能在此上下文中使用”。但是,使用IF语句有可能吗?@Raksa-是的,我们可以..使用多行表值函数,但为什么?性能方面的内联将比多行函数更快..不要这样做