在sql存储过程中怎么判断一个变量值在其表内是否存在,并返还bool值?
做一个添加学生信息的函数,想输入一个学生的ID,调用存储过程来判断表内是否已有该学生的ID,如果有返回bool的true,没有返回false。
谢谢大神指教!不尽感激!
耗时一整天 各种翻书查资料 找到了自认最合适我目的的方法 希望也能给其他人带来有用信息
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
这个例子差不多,自己完善下;
begin
select 字段 into 变量 from 表名 where 条件;
exception
when no_data_found then
--提示表中没有数据
end;
select * from yourtable where id=你传入的ID;
如果 返回结果,你就return TRUE;
else return false;
说明:这种问题定义一个数据库函数来处理,会更好,实现如下,请参考:
-- 定义一个函数来处理会更好
-- 参数说明: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 ;
请自行替换函数中的表名及字段。
【补充】:
以下需在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 ;