在SQL中声明多个变量

10

我是SQL初学者,正在尝试确定如何将变量设置为AB
这是语句:

DECLARE @Planner AS VARCHAR(50) = '2566927' OR @Planner = '12201704'

我收到的错误信息如下:

执行SQL查询时发生以下错误:
关键字'OR'附近的语法不正确。

以下是更完整的示例:

DECLARE
@Planner AS VARCHAR(50) = '2566927'

--Temp Table for Final
CREATE TABLE #PP1(
  Part_Key varChar(50)
  ,Part_No varChar(50)
  ,Part_Name varChar(50)
  ,CurInv DECIMAL(10,2)
  ,MinInv DECIMAL(10,2)
  ,Past_Due DECIMAL(10,2)
  ,Week2 DECIMAL(10,2)
  ,Week4 DECIMAL(10,2)
  ,Week8 DECIMAL(10,2)
  ,Week12 DECIMAL(10,2)
  ,Plus12 DECIMAL(10,2)
  ,Dep26w DECIMAL(10,1)
  ,Stock DECIMAL(10,1)
  ,StockPur DECIMAL (10,1)
  )

--Temp Table to Limit Parts
CREATE TABLE #MRP_Parts(
  MRP_PK varChar(50)
  ,MRP_PN varChar(50)
  ,MRP_PNAME varChar(50)
  )

--Insert into Temp Part Table
INSERT #MRP_Parts

SELECT

PP.Part_Key
,PP.Part_No
,PP.Name

FROM Part_v_Part AS PP
WHERE (PP.Planner = @Planner OR @Planner = '')

--BEGIN Temp Table for Inventory
CREATE TABLE #CurrInv(
  CI_Part_Key varChar(50)
  ,CI_Part_No varChar(50)
  ,CI_Qty DECIMAL(10,1)
  ,CI_Min DECIMAL(10,2)
  )

INSERT #CurrInv

SELECT

PP.PArt_Key
,PP.Part_No
,ISNULL(PC1.Quantity,0)
,PP.Minimum_Inventory_Quantity

FROM Part_v_Part AS PP
OUTER APPLY
(
  SELECT
    SUM(PC.Quantity) AS Quantity
  FROM Part_v_Container as PC
  WHERE PP.part_Key=PC.part_Key
    AND (PC.Container_Status = 'OK' 
      OR PC.Container_Status = 'Receiving'
      OR PC.Container_Status = 'Testing Hold')
    AND PC.Active = '1'
    AND (PP.Planner = @Planner OR @Planner = '')
) AS PC1

我希望 @Planner 可以是 A 或 B。

1
你正在使用哪个数据库管理系统(DBMS)? - jarlh
3
无法将变量设置为“A或B中的任一值”:它必须有一个值。请编辑并解释您想要做什么。 - giorgiga
2
一个变量保存一个值。一个值。你想做什么? - JNevill
@user9324484 第二个变量必须有一个不同的名称。 - Disillusioned
1
@user9324484 下定决心吧。为什么一个变量会有两个值?你怎么知道该赋哪个值?这根本就没有意义。 - Eric
显示剩余5条评论
2个回答

20
一个第二变量必须有不同的名称。例如。
DECLARE  @Planner1 VARCHAR(50) = '2566927',
         @Planner2 varchar(10) = '12201704',
         @OtherVar int = 42

用逗号,分隔每个变量声明。


3
你不能这样做,但你可以将变量声明为一个表,并将多个值放入表中。
DECLARE @Planner AS TABLE (P VARCHAR(50))
INSERT @Planner SELECT '2566927' 
INSERT @Planner SELECT '12201704'

然后您可以在where in类型的子句中使用表变量。

SELECT
    PP.Part_Key
    ,PP.Part_No
    ,PP.Name
FROM Part_v_Part AS PP
WHERE PP.Planner IN (SELECT P FROM @Planner)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接