使用Sql Server 2012.我有一个存储过程,其中一部分检查用户名是否在表中。如果是,则返回1,如果不是,则返回2.这是我的代码:
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 1 else 2
但是,我一直收到以下错误:
' 1'附近的语法不正确。
甚至可以使用IF EXIST吗?
此致
迈克尔
答案 0 :(得分:53)
如果你想这样做,那么这就是你所遵循的语法;
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx')
BEGIN
SELECT 1
END
ELSE
BEGIN
SELECT 2
END
您并不严格需要BEGIN..END
语句,但最好从一开始就养成这种习惯。
答案 1 :(得分:7)
如何使用IIF?
SELECT IIF (EXISTS (SELECT 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx'), 1, 2)
另外,如果使用EXISTS检查行是否存在,请不要使用*,只需使用1.我相信它的成本最低。
答案 2 :(得分:4)
在没有SELECT
的SQL中,您无法获得任何结果。我更喜欢使用IF-ELSE
语句代替CASE
阻止
SELECT CASE
WHEN EXISTS (SELECT 1
FROM tblGLUserAccess
WHERE GLUserName = 'xxxxxxxx') THEN 1
ELSE 2
END
答案 3 :(得分:3)
您需要什么输出,print
或IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') select 1 else select 2
或..等等。
所以请使用以下代码:
<tr>
答案 4 :(得分:2)
您可以定义变量@Result
以填充其中的数据
DECLARE @Result AS INT
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx')
SET @Result = 1
else
SET @Result = 2
答案 5 :(得分: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