我创建了一个简单的SQL Server函数。一旦我添加了
IF Else
块,它就开始显示错误:
EREQUEST"END"附近语法错误
虽然代码看起来很直接,也查看了几个论坛帖子,但我不知道问题到底在哪里。请帮忙。
CREATE FUNCTION Detect_Subscription(@ID INT) RETURNS VARCHAR(20)
BEGIN
DECLARE @Status INT, @customer VARCHAR(20);
SELECT @Status = COUNT(*) FROM premium WHERE premium.user_id = @ID;
IF @Status > 0 THEN SET @customer = 'Premium';
ELSE SET @customer = 'Free';
END IF;
RETURN @customer;
END
您的函数似乎适合SQL Server。
你可以简化你的功能如下:
CREATE FUNCTION Detect_Subscription(@ID INT) RETURNS VARCHAR(20)
BEGIN
DECLARE @customer VARCHAR(20);
SELECT
@Customer =
CASE
WHEN COUNT(1) > 0 THEN 'Premium'
ELSE 'Free'
END
FROM premium WHERE premium.user_id = @ID;
RETURN @customer;
END
我认为IF
的使用很好。我会将其与EXISTS
:配对
CREATE FUNCTION Detect_Subscription (
@ID INT
) RETURNS VARCHAR(20) AS
BEGIN
DECLARE @customer VARCHAR(20);
IF (EXISTS (SELECT 1 FROM premium p WHERE p.user_id = @ID))
BEGIN
SET @customer = 'Premium';
END;
ELSE SET @customer = 'Free';
RETURN @customer;
END;
如果您可以在给定用户的premium
中有多行,则这比COUNT(*)
稍微快一点(如果不可能,则速度稍微快一纳米(。
要点:
- SQL Server没有
END IF
- SQL Server在定义函数时需要
AS