[英]SQL Stored Procedure - Invalid Column Name
我正在 SSMS 中构建一个存储过程,但遇到了一堵砖墙。
USE [VINTCMPA]
go
/****** Object: StoredProcedure [dbo].[OpenOrderReport] Script Date: 12/05/2021 12:20:35 ******/
SET ansi_nulls ON
go
SET quoted_identifier ON
go
-- =============================================
-- Author: Bancroft Wines
-- Create date: 12/05/2021
-- Description:
-- =============================================
ALTER PROCEDURE [dbo].[Openorderreport]
-- Add the parameters for the stored procedure here
@startdate DATETIME = NULL,
@enddate DATETIME = NULL
AS
BEGIN
SET @startdate = CONVERT(DATETIME, '2021-04-30 23:59:59', 102)
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET nocount ON;
-- Insert statements for procedure here
SELECT Customers.cust_acc AS CUSTCODE,
[Sales Order Details].vop_ordn AS ORDERNO,
'Invoiced SOP' AS TYPE,
[Sales Order Header].ordidate AS DATE,
Round([Sales Order Details].vol_qtty /
[Sales Order Details].volcsize
*
[Sales Order Details].volcprcn /
[Sales Order Header].ordexch1, 2)
AS VALUE,
Round(Round([Sales Order Details].vol_qtty /
[Sales Order Details].volcsize *
[Sales Order Details].volcprcn /
[Sales Order Header].ordexch1, 2) -
[Sales Order Details].casecost *
[Sales Order Details].vol_qtty
/
[Sales Order Details].volcsize, 2) AS MARGIN
FROM vopoline AS [Sales Order Details]
INNER JOIN voporder AS [Sales Order Header]
ON [Sales Order Details].vop_ordn =
[Sales Order Header].vop_ordn
INNER JOIN vslname1 AS Customers
ON [Sales Order Header].cust_acc = Customers.cust_acc
AND [Sales Order Header].cust_acc = Customers.custaccs
INNER JOIN vstmain1 AS Products
ON [Sales Order Details].prd_code = Products.prd_code
WHERE ( [Sales Order Header].ordidate >=
CONVERT(DATETIME, '2021-04-30 23:59:59', 102)
)
AND ( [Sales Order Header].ordidate <=
CONVERT(DATETIME, '2021-05-12 23:59:59',
102)
)
AND ( [Sales Order Header].ordacode <> 'S' )
AND ( [Sales Order Header].ord_stat = 5 )
AND ( Products.grp_code >= '001' )
AND ( Customers.custanl1 = 'NO' )
OR ( [Sales Order Header].ordidate >=
@startdate
)
AND ( [Sales Order Header].ordidate <=
@enddate
)
AND ( [Sales Order Header].ordacode = 'S' )
AND ( [Sales Order Header].ord_stat = 5 )
AND ( Products.grp_code >= '001' )
AND ( Customers.custanl1 = 'NO' )
AND ( [Sales Order Header].credstyl = 1 )
ORDER BY custcode,
orderno
END
go
引发错误:
列名“VALUE”无效。
我已经定义了 VALUE,所以我不确定为什么它没有检测到它。
编辑:
我重新格式化了代码,现在它没有显示无效列错误,但是它似乎没有向表中输入任何内容。
select
不能引用其他计算列,这发生在查询过程的不同阶段,不可用。 您需要重复标准或使用包装第一个标准的外部 select 中的[value]
。
如果您将所选列分开到单独的行或至少在逻辑组中,并删除不必要的括号,您会发现更容易阅读。
在您的select
中尝试以下操作
Round(Round((([Vol_Qtty]/[VolCsize])*[VolCprcN])/[OrdExch1],2)-([CaseCost]*[Vol_Qtty]/[VolCsize]),2) AS MARGIN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.