La sous-requête a renvoyé plus d'une valeur. Ceci n'est pas autorisé lorsque la sous-requête suit =,! =, & Lt;, & lt; =, & gt;, & gt; = ou lorsque la sous-requête est utilisée comme expression
J'ai une procédure stockée qui select * from book table
, à l'aide de sous-requêtes ma requête est
USE [library]
GO
/****** Object: StoredProcedure [dbo].[report_r_and_l] Script Date: 04/17/2013 12:42:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[report_r_and_l]
@fdate date,
@tdate date,
@key varchar(1)
as
if(@key='r')
select *
from dbo.books
where isbn =(select isbn from dbo.lending where (act between @fdate and @tdate) and (stat ='close'))
else if(@key='l')
select *
from dbo.books
where isbn =(select isbn from dbo.lending where lended_date between @fdate and @tdate)
Je sais que sous-requête est de retour plus d'une requête de requête principale , Mais je ne sais pas comment faire pour éviter cette erreur, quelqu'un peut-il m'aider ?
source d'informationauteur Roshan
Vous devez vous connecter pour publier un commentaire.
Le problème est que ces deux requêtes sont chaque retour de plus d'une ligne:
Vous avez deux choix, en fonction de votre résultat souhaité. Vous pouvez remplacer le ci-dessus requêtes avec quelque chose qui est garanti pour retourner un unique ligne (par exemple, en utilisant
SELECT TOP 1
), OU vous pouvez passer votre=
àIN
et retourner plusieurs lignes, comme ceci:Utilisation
In
au lieu de=
ou vous pouvez utiliser
Exists
Vous pouvez utiliser DE l'utilisateur comme ci-dessous