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 Statement
或IF 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' 附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章