使用 Sql Server 2012。我有一个存储过程,其中的一部分检查表格中是否存在用户名。如果存在,返回 1;如果不存在,返回 2。以下是我的代码:
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 1 else 2
然而,我一直收到以下错误:
“1”附近语法不正确。
使用IF EXIST是否可能出现这种情况?
敬礼,
迈克尔
使用 Sql Server 2012。我有一个存储过程,其中的一部分检查表格中是否存在用户名。如果存在,返回 1;如果不存在,返回 2。以下是我的代码:
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 1 else 2
然而,我一直收到以下错误:
“1”附近语法不正确。
使用IF EXIST是否可能出现这种情况?
敬礼,
迈克尔
如果你想用这种方式来做,那么这就是你需要的语法;
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx')
BEGIN
SELECT 1
END
ELSE
BEGIN
SELECT 2
END
你不一定需要BEGIN..END
语句,但最好从一开始就养成这个习惯。
使用IIF怎么样?
SELECT IIF (EXISTS (SELECT 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx'), 1, 2)
此外,如果要使用EXISTS来检查行的存在性,请不要使用*,而是使用1。我认为这样成本最小。
最佳实践是始终使用TOP 1 1
。
如果我使用SELECT 1
-> 如果条件匹配多个记录,则您的查询将获取所有列记录并返回1。
如果我使用SELECT TOP 1 1
-> 即使条件匹配多个记录,它也仅会获取任何一行(具有自身值为1的列)的存在并返回1。
IF EXISTS (SELECT TOP 1 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx')
BEGIN
SELECT 1
END
ELSE
BEGIN
SELECT 2
END
在SQL中,如果没有使用SELECT
,则无法获得任何结果。我更喜欢使用CASE
语句代替IF-ELSE
块来实现这个功能。
SELECT CASE
WHEN EXISTS (SELECT 1
FROM tblGLUserAccess
WHERE GLUserName = 'xxxxxxxx') THEN 1
ELSE 2
END
@Result
,将数据填充到其中。DECLARE @Result AS INT
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx')
SET @Result = 1
else
SET @Result = 2
您需要的输出是什么,是select
还是print
等等。
因此,请使用以下代码:
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') select 1 else select 2