在sql存储过程中怎么判断一个变量值在其表内是否存在,并返还bool值?

做一个添加学生信息的函数,想输入一个学生的ID,调用存储过程来判断表内是否已有该学生的ID,如果有返回bool的true,没有返回false。
谢谢大神指教!不尽感激!

6个回答

耗时一整天 各种翻书查资料 找到了自认最合适我目的的方法 希望也能给其他人带来有用信息

CREATE PROCEDURE [dbo].[usp_IsLineIDExist]
@v_lineID int,
@v_exist int output
AS

SET NOCOUNT ON

BEGIN
IF EXISTS(SELECT [lineID] FROM [dbo].[Line] WHERE [lineID]=@v_lineID)
BEGIN
SET @v_exist=1
END
ELSE
BEGIN
SET @v_exist=0
END
END

说明:这种问题定义一个数据库函数来处理,会更好,实现如下,请参考:

-- 定义一个函数来处理会更好
-- 参数说明:studentId 学生ID(需要传入)
delimiter $
create function checkStudentIsExist(studentId varchar(32))
returns int(1) language sql
begin
-- 定义判断标识符
declare cnt int(1) default 0;

-- 查询学生表 (tab_student) 中改studentId对应的数据条数
select count(1) into cnt from tab_student where student_id = studentId;

-- 判断是否存在, 1 表示存在;0 表示不存在
if(cnt > 0) then 
    return 1;
else 
    return 0;

end;
delimiter ;

请自行替换函数中的表名及字段。

qq123zzz
zhangyuanyincsdn 补充:
3 年多之前 回复
Tavin_77
Tavin_77 你好 谢谢你的回复。按照你的想法 我写了写 可是到处报错 我是小白 并不会数据库函数 能不能给个完整点的代码
3 年多之前 回复

这个例子差不多,自己完善下;

 begin
  select 字段 into 变量 from 表名 where 条件;
exception
  when no_data_found then
    --提示表中没有数据
end;
Tavin_77
Tavin_77 你好 首先谢谢你的回复 我按照你的格式书写了 但他报错 我是小白 你能再帮我看看么?
3 年多之前 回复

图片说明@写给初学者的几封信

Tavin_77
Tavin_77 回复写给初学者的几封信: 重新加上了 还是exception报错 而且no_data_found是什么函数么?
3 年多之前 回复
HackAge4619
写给初学者的几封信 你的begin加了没,还有 Exception报错了!
3 年多之前 回复

select * from yourtable where id=你传入的ID;
如果 返回结果,你就return TRUE;
else return false;

Tavin_77
Tavin_77 第一句没问题,第二句是如何判断的?总不能写汉字啊。。。
3 年多之前 回复

【补充】:

以下需在mysql数据库中执行, 若为其他库(Oracle、DB2等)需参考其格式稍作修改,大致都雷同:

-- 创建表
create table tab_student(student_id varchar(32) primary key);

-- mysql数据库,启用可创建自定义函数
set global log_bin_trust_function_creators=TRUE;

-- 删除函数
drop function checkStudentIsExist;

-- 创建函数
delimiter $
create function checkStudentIsExist(studentId varchar(32))
returns int(1) language sql
begin
-- 定义判断标识符
declare cnt int(1) default 0;

-- 查询学生表中改studentId对应的数据条数
select count(1) into cnt from tab_student where student_id = studentId;

-- 判断是否存在, 1 表示存在;0 表示不存在
if(cnt > 0) then 
    return 1;
else 
    return 0;
    end if;

end;
delimiter ;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐