繁体   English   中英

SQL 存储过程 - 列名无效

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM