关于在SQL中要判断 多个条件有一个不成立的情况应该怎么写?
有三个表:
表一:
CREATE TABLE [dbo].[学生信息] (
[学生ID] [int] IDENTITY (1, 1) NOT NULL ,
[学号] [char] (15) COLLATE Chinese_PRC_CI_AS NULL ,
[姓名] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
) ON [PRIMARY]
GO
表二:
CREATE TABLE [dbo].[家庭信息] (
[家庭信息ID] [int] IDENTITY (1, 1) NOT NULL ,
[成员姓名] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[成员关系] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[学生ID] [int] NULL
) ON [PRIMARY]
GO
表三:
CREATE TABLE [dbo].[学生简历] (
[学生简历ID] [int] IDENTITY (1, 1) NOT NULL ,
[起始时间] [datetime] NULL ,
[终止时间] [datetime] NULL ,
[工作单位] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[学生ID] [int] NULL
) ON [PRIMARY]
GO
需要实现功能:在学生简历和家庭信息都不存在时才能删除学生信息表:
方法一:
CREATE PROCEDURE 删除学生信息
@学生ID int
AS
begin
set nocount on
if exists (
((select 家庭信息ID from dbo.家庭信息 where 学生ID=@学生ID) is null) and
((select 家庭信息ID from dbo.家庭信息 where 学生ID=@学生ID ) is null )
)
delete dbo.学生信息 where 学生ID=@学生ID
为什么报错:
服务器: 消息 156,级别 15,状态 1,过程 删除学生信息,行 7
在关键字 'is ' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,过程 删除学生信息,行 8
在关键字 'is ' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,过程 删除学生信息,行 10
第 10 行: '@学生ID ' 附近有语法错误。
方法二:
CREATE PROCEDURE 删除学生信息
@学生ID int
AS
begin
set nocount on
if not exists (
(select 家庭信息ID from dbo.家庭信息 where 学生ID=@学生ID) or
(select 家庭信息ID from dbo.家庭信息 where 学生ID=@学生ID )
)
delete dbo.学生信息 where 学生ID=@学生ID
报错:
服务器: 消息 156,级别 15,状态 1,过程 删除学生信息,行 8
在关键字 'or ' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,过程 删除学生信息,行 10
第 10 行: ') ' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,过程 删除学生信息,行 11
第 11 行: '@学生ID ' 附近有语法错误。
希望高手给予指教!请问在SQL中 or 关键字,能不能像在程序中那样做为‘或’运算!
在SQL 中要判断 多个条件有一个不成立的情况应该怎么写?
------解决方案--------------------汗,
按照你这个思路可以考虑这么写
CREATE PROCEDURE 删除学生信息
@学生ID int
AS
begin
DECLARE @sumCount int,
DECLARE @jlCount int,
DECLARE @jtCount int
set @jtcount=(select count(*) from 家庭信息 where 学生ID=@学生ID)
set @jlCount=(select count(*) from 学生简历 where 学生ID=@学生ID)
set @sumCount=@jlCount+@jtCount
if @sumCount=0
begin
delete d