Mic*_*ael 32 sql sql-server stored-procedures if-statement sql-server-2012
使用Sql Server 2012.我有一个存储过程,其中一部分检查用户名是否在表中.如果是,则返回1,如果不是,则返回2.这是我的代码:
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 1 else 2
Run Code Online (Sandbox Code Playgroud)
但是,我一直收到以下错误:
'1'附近的语法不正确.
这是否可以通过IF EXIST实现?
问候,
迈克尔
Ric*_*ner 69
如果你想这样做,那么这就是你所追求的语法;
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx')
BEGIN
SELECT 1
END
ELSE
BEGIN
SELECT 2
END
Run Code Online (Sandbox Code Playgroud)
你并不严格需要这些BEGIN..END陈述,但最好从一开始就养成这种习惯.
始终保持最佳实践TOP 1 1。
如果我使用SELECT 1-> 如果条件匹配多条记录,那么您的查询将获取所有列记录并返回 1,该怎么办?
如果我使用SELECT TOP 1 1-> If 条件也匹配多个记录,它只会获取任何行(具有自 1 值列)的存在并返回 1。
IF EXISTS (SELECT TOP 1 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx')
BEGIN
SELECT 1
END
ELSE
BEGIN
SELECT 2
END
Run Code Online (Sandbox Code Playgroud)
使用IIF怎么样?
SELECT IIF (EXISTS (SELECT 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx'), 1, 2)
Run Code Online (Sandbox Code Playgroud)
此外,如果使用EXISTS来检查行的存在,请不要使用*,只需使用1.我相信它可以降低成本.
您可以定义一个变量@Result来填充您的数据
DECLARE @Result AS INT
IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx')
SET @Result = 1
else
SET @Result = 2
Run Code Online (Sandbox Code Playgroud)
在没有SELECT你的SQL 中,你不能产生任何结果。IF-ELSE我更喜欢为此使用CASE语句而不是块
SELECT CASE
WHEN EXISTS (SELECT 1
FROM tblGLUserAccess
WHERE GLUserName = 'xxxxxxxx') THEN 1
ELSE 2
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
181249 次 |
| 最近记录: |