Sql 对具有变量赋值的查询使用UNION all时出错
获取以下错误 为变量赋值的SELECT语句不得与数据检索操作结合使用 在包含顶级UNION、INTERSECT或EXCEPT运算符的语句中不允许变量赋值Sql 对具有变量赋值的查询使用UNION all时出错,sql,sql-server,Sql,Sql Server,获取以下错误 为变量赋值的SELECT语句不得与数据检索操作结合使用 在包含顶级UNION、INTERSECT或EXCEPT运算符的语句中不允许变量赋值 这篇评论太长了 首先,SQL Server不允许一次选择既返回结果集又分配变量值。这是语言中固有的 其次,变量赋值基本上假设基础查询将返回一行,或者最多返回一行 UNIONALL查询可能会返回多行。您可能会想:它实际上只返回一行,所以这没关系。然而,我可以理解为什么语言的设计者会拒绝语法 你能做什么 您可以将UNION ALL放在子查询中,并在
这篇评论太长了 首先,SQL Server不允许一次选择既返回结果集又分配变量值。这是语言中固有的 其次,变量赋值基本上假设基础查询将返回一行,或者最多返回一行 UNIONALL查询可能会返回多行。您可能会想:它实际上只返回一行,所以这没关系。然而,我可以理解为什么语言的设计者会拒绝语法 你能做什么 您可以将UNION ALL放在子查询中,并在外部查询中进行赋值。 您可以在第一个查询上运行分配。如果没有返回任何内容,请尝试第二个查询。 您可以重新表述逻辑,这样就不需要这个特定的查询了。
如果您对3感兴趣,我建议您提出一个新问题,解释逻辑,并提供示例数据和所需结果。OK。那你觉得不清楚或不同意的错误怎么办?你正在做它说你做不到的事情,通过尝试将select@latest=作为联合查询的一部分。错误告诉你问题所在。不能在同一查询中为变量赋值并返回数据集。这似乎是一个XY问题。您实际上想在这里做什么。选择@latest必须在此变量中放置一个值。但是,该并集使您具有2个或更多值。这就是为什么它是不可接受的。还有,为什么是不同的,然后是统一的?如果要得到重复的行,那么使用UNION是没有意义的。进入21世纪-停止使用let me try@Gordon Linoff
USE [DDRS]
GO
/****** Object: StoredProcedure [dbo].[Test] Script Date: 10/20/2019 8:59:04 PM ******/
--
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[Test]
as
begin
SELECT DISTINCT
DO.Contract_Number AS Contract_Number,
'Ambiguity in contract No' AS Remarks
FROM
weight3 w3, Delivery_Order DO
WHERE
w3.DO_UID = DO.DO_UID AND w3.ContractNo <> DO.Contract_Number
UNION ALL
SELECT DISTINCT
w3.ContractNo AS contract_number,
'Ambiguity in Transporter Name' AS Remarks
FROM
weight3 w3, Delivery_Order DO
WHERE
w3.DO_UID = DO.DO_UID AND w3.Transporter_Name <> DO.TransporterName
--For closed DO
declare @latest date
declare @ContractNumber nvarchar(200)
select @latest=Max(DO.Time_stamp), @ContractNumber=DO.Contract_Number from Delivery_Order DO where DO_Status='Received' group by DO.Contract_Number
Union ALL
select w3.ContractNo as contract_number,'After closing the DO data is entered!' AS Remarks
from weight3 w3 where
@latest<(select distinct MAX(w3.second_time) from weight3 w3 where w3.ContractNo=@ContractNumber) and w3.ContractNo=@ContractNumber
End