1

我的存储过程中有三个参数。在其中两个上,我执行 SELECT 语句来检索特定值。我想使用第三个参数对前两个参数进行 UNION。基本上这就是它的样子。

DECLARE @MaxDate1
DECLARE @MaxDate2
DECLARE @AllDate
SELECT @MaxDate1 = MAX(Date) FROM Table1
SELECT @MaxDate2 = MAX(Date) FROM Table2

这就是我想要的,但是在这种情况下我不知道如何编写查询。

SET @AllDate = @MaxDate1 UNION @MaxDate2

感谢您的帮助或建议。

好吧,因为我收到了很多缺点,所以我将尝试解释我是如何尝试做整件事的。我有一个存储过程,首先我从两个不同的表中查找最新日期。查找日期后,我创建了一个 IF ELSE 语句,说明如果用户选择的日期大于数据库中的日期,则它应该返回错误,但是如果日期小于 MaxDate,则所有列和行应返回到所选日期。但是日期是动态的,因此查询每次都会查找它们。因此检查 MaxDate 并据此查找字段也需要很长时间......连接超时。所以我试图在两个字段的 MaxDate 上建立一个联合,并使用 @AllDate 作为参数来检查所选日期。希望它更清楚:)

4

3 回答 3

2

联合用于“联合”到数据集。

您可以执行以下操作:

select @maxdate1 as Maxdate
union 
select @maxdate2

虽然你不需要这一切,因为你可以做类似的事情

select max(Date) as Maxdate from Table1
union
select max(Date) as Maxdate from Table2

在标量上,您不能使用联合。

于 2013-03-01T12:49:10.053 回答
2

如果您的 PRC 需要表结构中的两个日期,那么为什么不使用表,如下所示:

DECLARE @DateTable TABLE(
MaxDate datetime)

INSERT INTO @DateTable (MaxDate)
select max(Date) as Maxdate from Table1
union
select max(Date) as Maxdate from Table2

如果您需要返回两个日期以供其他程序或以后使用,我建议您使用 a TABLE-VALUED FUNCTION,因为这样您就可以返回一个表格,供您SELECT以后使用。

CREATE FUNCTION dbo.GetMaxDates()
RETURNS @MaxDates TABLE
(
MaxDate datetime
)
AS
BEGIN

INSERT INTO @DateTable (MaxDate)
select max(Date) as Maxdate from Table1
union
select max(Date) as Maxdate from Table2

RETURN

END
于 2013-03-01T12:55:38.473 回答
1

你不能写这个吗:

SELECT @MaxDate1 AS MaxDate1, @MaxDate2 AS MaxDate2
于 2013-03-01T12:49:21.580 回答