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

Posted

技术标签:

【中文标题】EREQUEST \'END\' 附近的语法不正确【英文标题】:EREQUEST Incorrect syntax near 'END'EREQUEST 'END' 附近的语法不正确 【发布时间】:2020-10-15 07:01:46 【问题描述】:

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

【问题讨论】:

你确定,你已经为 mysql 编写了你的​​函数吗?好像是Sql Server 感谢乔的帮助! :) 是的,你是对的,我把它们弄混了。 掌心时刻 T-SQL 中没有END IF。是IF boolean statement true statement ELSE False StatementIF boolean statement BEGIN True statements END ELSE BEGIN False statements END 学习好习惯。没有理由实际 COUNT 行来测试存在 - 这样做效率较低。 @Larnu 感谢您的帮助:) 【参考方案1】:

您的函数似乎适合 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

【讨论】:

【参考方案2】:

我认为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

【讨论】:

以上是关于EREQUEST 'END' 附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

Phpmyadmin 在“END”附近创建触发器语法错误

SqlException:“nvarchar”附近的语法不正确

关键字“FOR”XML 附近的语法不正确

附加信息:'s'附近的语法不正确[关闭]

错误“关键字 'CONVERT' 附近的语法不正确”

SqlDataException:'=' 附近的语法不正确