简体   繁体   English

SQL 存储过程 - 列名无效

[英]SQL Stored Procedure - Invalid Column Name

I'm building a stored procedure within SSMS and I've run into a brick wall.我正在 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 

Which throws the error:引发错误:

Invalid column name 'VALUE'.列名“VALUE”无效。

I've defined VALUE, so I'm not sure why it's not detecting it.我已经定义了 VALUE,所以我不确定为什么它没有检测到它。

EDIT:编辑:

I've reformatted the code, and it now does not show the invalid column error, however it doesn't seem to be inputting anything to the table.我重新格式化了代码,现在它没有显示无效列错误,但是它似乎没有向表中输入任何内容。

The select cannot refer to other calculated columns, this happens at a different stage in the query process and is unavailable. select不能引用其他计算列,这发生在查询过程的不同阶段,不可用。 you need to either repeat the criteria or use the [value] in an outer select that wraps the first one.您需要重复标准或使用包装第一个标准的外部 select 中的[value]

You would find it easier to read if you separated your selected columns onto separate lines or at least in logical groups, and removed the unecessary parantheses.如果您将所选列分开到单独的行或至少在逻辑组中,并删除不必要的括号,您会发现更容易阅读。

Try the following in your select在您的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