【发布时间】:2012-09-27 11:30:21
【问题描述】:
CREATE PROCEDURE [dbo].[rpt_Report]
@Product varchar(20) = NULL,
@From DateTime = null,
@To DateTime = null
AS
BEGIN
SELECT
CO.PO, CO.DLVRY,
CASE
WHEN co.CUST_ID = '120' THEN '120'
WHEN HDR.PO_NO LIKE 'CL%' THEN 'CL'
WHEN RED.REU = 'SK' THEN 'STOCK'
WHEN RED.REU = 'SM' THEN 'ORTS'
WHEN co.ITEM = 'PW%' THEN 'CHAIN'
WHEN co.ITEM LIKE 'D%' THEN 'VAN' ELSE 'MISC'
END AS PRODUCT
FROM
co AS co
INNER JOIN
HDR AS HDR ON co.NUMBER = HDR.NUMBER
INNER JOIN
RED AS RED ON co.ITEM = RED.ITEM
WHERE
(co.DLVRY BETWEEN @From AND @To) AND (@Product = PRODUCT)
ORDER BY
co.DLVRY DESC
END
当我执行它时,我收到一条错误消息
消息 207,级别 16,状态 1,过程 rpt_Report,第 34 行
列名“PRODUCT”无效。
我应该在 where CLAUSE 中使用 case 字段值作为参数。
【问题讨论】:
-
尝试去掉 PRODUCT 后面的逗号
-
从
... END AS Product ,中删除FROM关键字之前的逗号 - 不需要逗号并导致此错误.... -
嗨 devak & marc,逗号是错误添加的。即使删除逗号后,也会发生相同的错误。我需要的是 product_type 字段值,它应该在 where 子句中用作 @product 的值。但由于 Product_type 字段不是上述任何表中的列,因此它会作为无效列抛出错误。
-
PRODUCT_TYPE(WHERE)和PRODUCT(SELECT)是同一列吗? -
那么这个 PRODUCT_TYPE 列是什么。如果它不是来自任何表,那么您希望它如何获取值。
标签: sql-server-2008 stored-procedures parameters case