如何删除SQL上的分区功能

时间:2019-05-27 16:58:17

标签: sql sql-server visual-studio ssis etl

所以我得到了ETL,它存储了3年'17(腐败),'18(腐败),'19:

STG_tables:从3个不同的数据库导入数据并将其导出到

DWH_tables:这是所有历史信息都存储在其中的关系型关系。在这里,仅对表和字段进行规范化和参数化以使其适应已开发的逻辑模型,但未应用任何业务规则。

DIM_tables:最后,在Dimensional Fase中,将应用业务规则,并针对查询优化表和索引,因为这是分析工具将攻击的地方。

我有2种重新加载类型:

每日重新加载:此作业负责执行执行数据仓库每日增量加载所需的SSIS程序包。它只会加载维度Fase中大表的最后一个分区(与当年相对应)。

完全重新加载:加载满3年(这一年无效)

这不是我做的,我有0个技术文档,所以我只是想弄清楚它是如何工作的,我的想法是,一旦我完成了全部重载,数据就会恢复。

我在STG_fase上遇到错误:

  

DROP TABLE DWH_PROD.DWH_XX;   DROP TABLE ...':'在一个或多个分区方案中使用了分区函数'pfPetitions'。错误的可能原因:查询问题,属性“ ResultSet”设置不正确,参数设置不正确或连接建立不正确。

我不知道如何删除该分区,所以我可以再次创建它 并且找不到“ ResultSet”属性,请帮助

USE DB;
GO

DROP TABLE DWH_PROD.DWH_ALBARANES_TARIFA;
DROP TABLE DWH_PROD.DWH_PETICIONES;
DROP TABLE DWH_PROD.DWH_SOLICITUDES;
DROP TABLE DWH_PROD.DWH_RESULTADOS;
DROP TABLE DWH_PROD.DWH_INCIDENCIAS;

-------i delete code so the text is not so big------
Here there are all the creation of the drop tables above

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_ALBARANES_TARIFA')
    CREATE TABLE DWH_PROD.DWH_ALBARANES_TARIFA (
    );

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_INCIDENCIAS')
    CREATE TABLE DWH_PROD.DWH_INCIDENCIAS (
    );

IF EXISTS (SELECT * FROM sys.partition_functions WHERE name = N'pfPeticiones')
    DROP PARTITION FUNCTION pfPeticiones;

CREATE PARTITION FUNCTION pfPeticiones (DATE)
AS RANGE RIGHT FOR VALUES 
('2017-01-01', '2018-01-01', '2019-01-01');

IF EXISTS (SELECT * FROM sys.partition_schemes WHERE name = N'psPeticiones')
    DROP PARTITION SCHEME psPeticiones;

CREATE PARTITION SCHEME psPeticiones
AS PARTITION pfPeticiones 
ALL TO ([Primary]);

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_PETICIONES')
    CREATE TABLE DWH_PROD.DWH_PETICIONES (
    ) ON psPeticiones(FEC_PETICION);

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_SOLICITUDES')
    CREATE TABLE DWH_PROD.DWH_SOLICITUDES (
    ) ON psPeticiones(FEC_PETICION);

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_RESULTADOS')
    CREATE TABLE DWH_PROD.DWH_RESULTADOS (
    ) ON psPeticiones(FEC_PETICION);

2 个答案:

答案 0 :(得分:1)

您需要执行一些操作才能删除分区功能:

  1. 删除或移动所有使用分区模式的表(例如,如果有堆,则在PRIMARY上创建聚簇索引)。
  2. 删除分区架构。
  3. 删除分区功能。

答案 1 :(得分:0)

使用此分区的3个表已被删除

消息3701,第11级,状态5,第7行 无法删除表“ DWH_PROD.DWH_PETITIONS”,因为该表不存在或用户没有权限。 -其他2的消息

enter image description here

然后我将首先删除分区SCHEME仍然给我一个错误“分区方案'psPetitions'当前正用于在一个或多个表中创建分区。”

enter image description here

    IF EXISTS (SELECT * FROM sys.partition_schemes WHERE name = N'psPeticiones')
    DROP PARTITION SCHEME psPeticiones;

IF EXISTS (SELECT * FROM sys.partition_functions WHERE name = N'pfPeticiones')
    DROP PARTITION FUNCTION pfPeticiones;

CREATE PARTITION FUNCTION pfPeticiones (DATE)
AS RANGE RIGHT FOR VALUES 
('2017-01-01', '2018-01-01', '2019-01-01');

CREATE PARTITION SCHEME psPeticiones
AS PARTITION pfPeticiones 
ALL TO ([Primary]);

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_PETICIONES')
    CREATE TABLE DWH_PROD.DWH_PETICIONES (
         ID_PETICION INTEGER NOT NULL IDENTITY
        ,COD_PETICION VARCHAR(15) NOT NULL
        ,FEC_PETICION DATE NOT NULL
        ,COD_PACIENTE INTEGER
        ,COD_DOCTOR VARCHAR(10)
        ,COD_ORIGEN VARCHAR(4)
        ,COD_ENTIDAD VARCHAR(4)
        ,COD_CLIENTE_TARIFICA INTEGER
        ,COD_CLIENTE_FACTURA INTEGER
        ,COD_EMISORA INTEGER
        ,COD_APROD_PETICION VARCHAR(4)
        ,FEC_SALIDA DATE
        ,FEC_ENTREGA DATE
        ,FEC_IMPRESION DATETIME
        ,FEC_ULT_IMPRESION DATETIME
        ,FEC_TOMA_MUESTRA DATE
        ,HORA_TOMA_MUESTRA VARCHAR(4)
        ,IND_EMITIDO CHAR(1)
        ,IND_FACTURADA CHAR(1)
        ,VAL_DESCUENTO DECIMAL(10,2)
        ,COD_USUARIO_ALTA_PETICION VARCHAR(10)
        ,FEC_ALTA_PETICION DATETIME
        ,IND_BORRADO CHAR(1)
        ,TMP_PETICIONES DATETIME
        ,IND_PRIVADO CHAR(1)
        ,NUM_FACTURA INTEGER
        ,FEC_FACTURA DATE
        ,VAL_IMPORTE_FACTURADO DECIMAL(10,2)
        ,PRIMARY KEY(ID_PETICION,FEC_PETICION)
    ) ON psPeticiones(FEC_PETICION);

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_SOLICITUDES')
    CREATE TABLE DWH_PROD.DWH_SOLICITUDES (
         ID_SOLICITUD INTEGER NOT NULL IDENTITY
        ,COD_PETICION VARCHAR(15) NOT NULL
        ,FEC_PETICION DATE NOT NULL
        ,COD_SOLICITUD VARCHAR(8) NOT NULL
        ,IND_URGENTE CHAR(1)
        ,VAL_PRECIO_SOLICITUD_TEORICO DECIMAL(10,2)
        ,COD_USUARIO_ALTA_SOLICITUD VARCHAR(10)
        ,FEC_ALTA_SOLICITUD DATETIME
        ,IND_BORRADO CHAR(1)
        ,TMP_SOLICITUDES DATETIME
        ,PRIMARY KEY(ID_SOLICITUD,FEC_PETICION)
    ) ON psPeticiones(FEC_PETICION);

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'DWH_RESULTADOS')
    CREATE TABLE DWH_PROD.DWH_RESULTADOS (
         ID_RESULTADO INTEGER NOT NULL IDENTITY
        ,COD_PETICION VARCHAR(15) NOT NULL
        ,FEC_PETICION DATE NOT NULL
        ,COD_SOLICITUD VARCHAR(8) NOT NULL
        ,COD_ANALISIS VARCHAR(8) NOT NULL
        ,DES_RESULTADO VARCHAR(200)
        ,IND_APROD_EFECTIVA CHAR(1)
        ,COD_APROD_EFECTIVA VARCHAR(4)
        ,FEC_RESULTADO DATETIME
        ,IND_VALIDADO CHAR(1)
        ,FEC_VALIDADO DATETIME
        ,COD_VAL_TECNICA VARCHAR(8)
        ,COD_VAL_FACULTATIVA VARCHAR(8)
        ,COD_ANALIZADOR VARCHAR(4)
        ,IND_BORRADO CHAR(1)
        ,TMP_RESULTADOS DATETIME
        ,IND_REPETIDA CHAR(1)
        ,PRIMARY KEY(ID_RESULTADO,FEC_PETICION)
    ) ON psPeticiones(FEC_PETICION);