我有一个存储过程,其中包含select * from book table
的语句,使用子查询后我的查询语句是:
我有一个存储过程,其中包含select * from book table
的语句,使用子查询后我的查询语句是:
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)
我知道子查询会将多个查询返回给主查询,但我不知道如何避免这个错误,有人能帮助我吗?
select isbn
返回了多个值。您可以使用where isbn IN (select isbn ...
。 - Hans Kestingselect top 1 isbn ...
或select max(isbn) ...
。即使您知道只会返回一行,但 SQL Server 不知道,因为错误消息是基于命令的统计分析而不是实际数据。 - Olivier Jacot-Descombes