EREQUEST "END"附近的语法不正确


我创建了一个简单的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

相关内容

最新更新