Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS SQL存储过程工作不正常_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

MS SQL存储过程工作不正常

MS SQL存储过程工作不正常,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我有一个名为Attention的表,我使用第一个\u术语的存储过程数据将数据插入该表,它成功插入,但当我们插入第二个\u术语的数据时,它没有正确插入 我的数据库表: /****** Object: Table [dbo].[Attendance] Script Date: 11/01/201******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Attendance](

我有一个名为Attention的表,我使用第一个\u术语的存储过程数据将数据插入该表,它成功插入,但当我们插入第二个\u术语的数据时,它没有正确插入

我的数据库表:

        /****** Object:  Table [dbo].[Attendance]    Script Date:   11/01/201******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Attendance](
  [attendanceid] [int] IDENTITY(1,1) NOT NULL,
  [admission_no] [nvarchar](50) NULL,
  [totalattendance_firstterm] [int] NULL,
  [totalworkingdays_firstterm] [int] NULL,
  [totalattendance_secondterm] [int] NULL,
  [totalworkingday_secondterm] [int] NULL
) ON [PRIMARY]
GO
我的存储过程如下所示:

  ALTER proc [dbo].[student_attendancedetails]
  (
  @admission_no nvarchar(50) ,
  @totalattendance_firstterm int,
  @totalworkingdays_firstterm int,
  @totalattendance_secondterm int,
  @totalworkingday_secondterm int
  )
 as 
 BEGIN
 IF NOT EXISTS(select admission_no from Attendance where admission_no=@admission_no)
 BEGIN
 INSERT INTO       Attendance(admission_no,totalattendance_firstterm,totalworkingdays_firstterm,   totalattendance_secondterm,totalworkingday_secondterm)values(@admission_no,@t   otalattendance_firstterm,@totalworkingdays_firstterm,@totalattendance_seconderm,@totalworkingday_secondterm)
END
ELSE IF(
(select totalattendance_firstterm from Attendance where   admission_no=@admission_no)is null or (select totalattendance_firstterm from   Attendance where admission_no=@admission_no)=0)
BEGIN
UPDATE Attendance set   totalattendance_firstterm=@totalattendance_firstterm where   admission_no=@admission_no
 END

ELSE IF(
  (select totalworkingdays_firstterm from Attendance where   admission_no=@admission_no)is null or (select totalworkingdays_firstterm  from Attendance where admission_no=@admission_no)=0)
  BEGIN
  UPDATE Attendance set    totalworkingdays_firstterm=@totalworkingdays_firstterm where      admission_no=@admission_no
  END

  ELSE IF(
   (select totalattendance_secondterm from Attendance where     admission_no=@admission_no)is null or (select totalattendance_secondterm    from Attendance where admission_no=@admission_no)=0)
  BEGIN
 UPDATE Attendance set   totalattendance_secondterm=@totalattendance_secondterm where     admission_no=@admission_no
  END
   ELSE IF(
   (select totalworkingday_secondterm from Attendance where    admission_no=@admission_no)is null or (select totalworkingday_secondterm from Attendance where admission_no=@admission_no)=0)
    BEGIN
    UPDATE Attendance set    totalworkingday_secondterm=@totalworkingday_secondterm where    admission_no=@admission_no
    END

  END

  GO
 exec student_attendancedetails '2089',89,120,0,0
 exec student_attendancedetails '2089',0,0,98,150
当我们按如下方式执行存储过程时:

  ALTER proc [dbo].[student_attendancedetails]
  (
  @admission_no nvarchar(50) ,
  @totalattendance_firstterm int,
  @totalworkingdays_firstterm int,
  @totalattendance_secondterm int,
  @totalworkingday_secondterm int
  )
 as 
 BEGIN
 IF NOT EXISTS(select admission_no from Attendance where admission_no=@admission_no)
 BEGIN
 INSERT INTO       Attendance(admission_no,totalattendance_firstterm,totalworkingdays_firstterm,   totalattendance_secondterm,totalworkingday_secondterm)values(@admission_no,@t   otalattendance_firstterm,@totalworkingdays_firstterm,@totalattendance_seconderm,@totalworkingday_secondterm)
END
ELSE IF(
(select totalattendance_firstterm from Attendance where   admission_no=@admission_no)is null or (select totalattendance_firstterm from   Attendance where admission_no=@admission_no)=0)
BEGIN
UPDATE Attendance set   totalattendance_firstterm=@totalattendance_firstterm where   admission_no=@admission_no
 END

ELSE IF(
  (select totalworkingdays_firstterm from Attendance where   admission_no=@admission_no)is null or (select totalworkingdays_firstterm  from Attendance where admission_no=@admission_no)=0)
  BEGIN
  UPDATE Attendance set    totalworkingdays_firstterm=@totalworkingdays_firstterm where      admission_no=@admission_no
  END

  ELSE IF(
   (select totalattendance_secondterm from Attendance where     admission_no=@admission_no)is null or (select totalattendance_secondterm    from Attendance where admission_no=@admission_no)=0)
  BEGIN
 UPDATE Attendance set   totalattendance_secondterm=@totalattendance_secondterm where     admission_no=@admission_no
  END
   ELSE IF(
   (select totalworkingday_secondterm from Attendance where    admission_no=@admission_no)is null or (select totalworkingday_secondterm from Attendance where admission_no=@admission_no)=0)
    BEGIN
    UPDATE Attendance set    totalworkingday_secondterm=@totalworkingday_secondterm where    admission_no=@admission_no
    END

  END

  GO
 exec student_attendancedetails '2089',89,120,0,0
 exec student_attendancedetails '2089',0,0,98,150
它将给出以下结果:

但我希望我的结果如下所示:


答案非常简单。运行时:

IF condition1
  code1
ELSE IF condition2
  code2
ELSE IF condition2
  code3
ELSE IF condition3
  code4
...
将只执行一个(
code1/code2/code3/code4
)。根据你的代码,我假设你想更新两次。所以你需要一些类似的东西:

IF condition1
BEGIN
  INSERT
END
ELSE
BEGIN
  IF condition2
    UPDATE1
  IF condition3
    UPDATE2
  IF condition4
   UPDATE3
END

警告:


当查询返回多行时,将失败。但是您可能在
admission\u no
上有唯一/主键。如果没有,我建议添加它。

答案非常简单。运行时:

IF condition1
  code1
ELSE IF condition2
  code2
ELSE IF condition2
  code3
ELSE IF condition3
  code4
...
将只执行一个(
code1/code2/code3/code4
)。根据你的代码,我假设你想更新两次。所以你需要一些类似的东西:

IF condition1
BEGIN
  INSERT
END
ELSE
BEGIN
  IF condition2
    UPDATE1
  IF condition3
    UPDATE2
  IF condition4
   UPDATE3
END

警告:

当查询返回多行时,将失败。但是您可能在
admission\u no
上有唯一/主键。如果没有,我建议添加它