日期:2014-05-18  浏览次数:20485 次

关于在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