【发布时间】:2026-02-15 14:45:01
【问题描述】:
我正在处理 ETL,我需要创建一个新表。此表在源中没有 PK,因此我必须在我的 Staging 中创建它。
这是我从中提取数据的查询:
SELECT PP.PRVECODI,
VW.GRUPDESC,
VW.FAMIDESC,
PP.ARTICODI,
VW.ARTIDESC,
PP.PROVREFER,
PP.PPLNMARCA,
PP.PPLNORIGEN,
( SELECT COUNT(1)
FROM CPR05.ACUERDOSCOMPRA AC
WHERE AC.ARTICODI = VW.ARTICODI
AND AC.ACUCDESDE <= TRUNC(SYSDATE)
AND AC.ACUCHASTA >= TRUNC(SYSDATE)
AND AC.PRVECODI = PP.PRVECODI ) ACUERDOS,VW.SBFMDESC
FROM CPR05.SAC_VWARTICULOS VW
INNER JOIN (
SELECT DISTINCT
ARTICODI,
PL.PROVREFER,
PL.PPLNMARCA,
PL.PPLNORIGEN,
P.PRVECODI
FROM CPR05.PROPUESTASLINEAS PL
INNER JOIN CPR05.PROPUESTAS P
ON (P.PPTACODI = PL.PPTACODI)
AND P.PPTAFECFIN >= TRUNC(SYSDATE)
) PP
ON (VW.ARTICODI=PP.ARTICODI)
ORDER BY
VW.GRUPDESC,
VW.FAMIDESC,
VW.ARTIDESC
我需要创建一个表来插入这个查询并且PK必须是PP.ARTICODI列和一个自增整数的组合。
我尝试将标识列与 ARTICODI 结合,但它不起作用:
CREATE TABLE CENTRALCOMPRASSTG..ProveedoresCatalogo(
IDProveedoresCatalogo INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
PRVECODI NUMERIC(9,0),
GRUPDESC NVARCHAR(40),
FAMIDESC NVARCHAR(40),
ARTICODI NUMERIC(9,0),
PROVREFER NVARCHAR(20),
PPLNMARCA NVARCHAR(20),
PPLNORIGEN NVARCHAR(50),
ACUERDOS INT,
SBFMDESC NVARCHAR(40)
)
Expected output 提前致谢
【问题讨论】:
-
如果您询问如何拥有一个由另一列分区或基于另一列分区的
IDENTITY列(因此您可以为不同的1值设置两个1值),那么您不能不支持。如果您要问其他问题,那么您的问题不清楚,您应该 edit 它提供 minimal reproducible example 显示您的预期输入和结果。 -
主键可以由多个列组成,如果您的意思是这样的话,可能
-
@nikos-m 在这种情况下我不需要约束 pk,而是自动增量整数和当前列的组合,请检查预期输出
-
@MT0 抱歉,已编辑
-
您的代码真的要在 Oracle 数据库上使用吗?它使用 IDENTITY 和内联 PRIMARY KEY 约束的方式使其看起来像 SQL Server(尽管您已将帖子标记为 Oracle)
标签: sql sql-server ssis etl