从SQL Server获取查询异常 [英] Getting a query exception from the SQL server

查看:212
本文介绍了从SQL Server获取查询异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我从Java代码中调用过程时,出现了如下异常:
com.microsoft.sqlserver.jdbc.SQLServerException:子查询返回了多个值.当子查询遵循=,!=,<,< =,>,> =或将子查询用作表达式时,不允许这样做.

步骤如下:

When I call the procedure from the java code I am geting an exception as
com.microsoft.sqlserver.jdbc.SQLServerException: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

The procedure is as follows:

CREATE PROCEDURE [dbo].[SENDMAIL] @Rollno varchar(11) 

OUTPUT, @mailid varchar(80) OUTPUT, @flag INT OUTPUT
AS
BEGIN
declare @cday varchar(11), @currday varchar(11), 

@currenttime varchar(20), @todaysDate varchar(20)

select @cday= [CHECK_DAY] from Students_Data where 

ROLL_NO=@Rollno;

select @mailid=[CONTACT_MAIL_ID] FROM Students_Data 

where ROLL_NO=@Rollno;

select @currday=DATENAME(DW, GETDATE());

select @todaysDate=convert (varchar(10), getdate(), 

120);

select @flag=1;


IF(@cday = @currday)
BEGIN
  IF((SELECT LEFT(CONVERT(TIME(0),GETDATE()) ,5)) >

(select DEADLINE_TIME from Students_Data WHERE 

ROLL_NO=@Rollno))
  BEGIN
    IF EXISTS (SELECT CRETAED_DATE FROM STUDENT_MAIL 

WHERE ROLL_NO=@Rollno AND CRETAED_DATE=@todaysDate)
	BEGIN
	  SET @flag = '1';
    END
    ELSE
     IF EXISTS (SELECT DISTINCT(ROLL_NO) FROM 

STUD_RECORDS WHERE ROLL_NO=@Rollno AND CRETAED_DATE 
		BETWEEN 
		(SELECT CONVERT(char(10), GetDate()-

7,126))
		AND
		(SELECT CONVERT(char(10), GetDate

(),126)))
		 BEGIN
		 SET @flag = '1';
		 END
		 ELSE
           SET @flag = '0';
           INSERT INTO STUDENT_MAIL(ROLL_NO) VALUES

(@Rollno);
     END
	END
END

推荐答案

Mirza,

我认为以下代码块会导致此错误...

Hi Mirza,

I think following block is causing this error...

IF((SELECT LEFT(CONVERT(TIME(0),GETDATE()) ,5)) >
 
(select DEADLINE_TIME from Students_Data WHERE ROLL_NO=@Rollno))



确保子查询应始终基于 @Rollno
返回单行
如果不可能,请在查询中使用 TOP 子句,如..



Make sure that the sub query should always return a single row based on @Rollno

If that is not possible use the TOP Clause in the query like ..

IF((SELECT LEFT(CONVERT(TIME(0),GETDATE()) ,5)) >
 
(select TOP 1 DEADLINE_TIME from Students_Data WHERE ROLL_NO=@Rollno))



谢谢



Thank you


这篇关于从SQL Server获取查询异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆