Publicado el :

Macro para la eliminación de restricciones de tabla

Este código también está disponible en: Deutsch English Français
Attention : Este código requiere privilegios de administrador.
La macro `mp_deleteconstraints` está diseñada para automatizar el proceso de eliminación de restricciones de tablas SAS©. Toma como entrada un conjunto de datos SAS© (`inds`) que contiene información detallada sobre las restricciones a las que se desea aplicar la acción (como la librería, el nombre de la tabla y el nombre de la restricción). Después de una clasificación previa del conjunto de datos de entrada, un `DATA STEP` recorre esta información para construir las instrucciones SQL `ALTER TABLE ... DROP CONSTRAINT` correspondientes. La ejecución de estas instrucciones está condicionada por el valor del parámetro `execute`. Si `execute` se establece en 'YES', la macro utiliza `CALL EXECUTE` para enviar los comandos SQL al servidor, modificando así la estructura de las tablas. El conjunto de datos de salida (`outds`) contiene las instrucciones SQL generadas, ya sean ejecutadas o no.
Análisis de datos

Type : INTERNE


La macro `mp_deleteconstraints` procesa un conjunto de datos SAS que debe ser proporcionado a través del parámetro `inds=`. Este conjunto de datos es generalmente el resultado de otro procedimiento o macro SAS (como `mp_getconstraints` mencionado en el encabezado), que extrae los metadatos de restricciones de tablas SAS existentes. El ejemplo de uso en los comentarios sugiere que el conjunto de datos de entrada puede crearse a partir de tablas temporales (`work.example`), lo que indica una gestión de datos interna al sistema SAS en lugar de una importación directa de archivos externos.

1 Bloque de código
Macro Definición y PROC SORT
Explicación :
Este bloque inicializa la macro `mp_deleteconstraints` y define sus tres parámetros: `inds` para el conjunto de datos de entrada de restricciones, `outds` para el conjunto de datos de salida ordenado, y `execute` para controlar la ejecución de los comandos SQL. El procedimiento `PROC SORT` se utiliza luego para ordenar el conjunto de datos de entrada (`&inds`) según las variables `libref`, `table_name` y `constraint_name`. El conjunto de datos ordenado se guarda bajo el nombre especificado por `&outds`.
¡Copiado!
1%macro mp_deleteconstraints(inds=mp_getconstraints
2 ,outds=mp_deleteconstraints
3 ,execute=NO
4)/*/STORE SOURCE*/;
5 
6PROC SORT DATA=&inds out=&outds;
7 BY libref table_name constraint_name;
8RUN;
2 Bloque de código
DATA STEP
Explicación :
Este `DATA STEP` procesa el conjunto de datos ordenado, generando una instrucción SQL `ALTER TABLE ... DROP CONSTRAINT` para cada restricción única (detectada por `first.constraint_name`). La variable `drop_statement` se crea para almacenar esta instrucción. Si el parámetro `execute` de la macro es 'YES', el comando `CALL EXECUTE('proc sql;')` se utiliza una sola vez al inicio del `DATA STEP` para abrir un bloque SQL, y `CALL EXECUTE(drop_statement)` ejecuta cada instrucción de eliminación de restricción generada. El `DATA STEP` también escribe las instrucciones generadas en el conjunto de datos de salida `&outds`.
¡Copiado!
1DATA &outds;
2 SET &outds;
3 BY libref table_name constraint_name;
4 LENGTH drop_statement $500;
5 IF _n_=1 and "&execute"="YES" THEN call execute('proc sql;');
6 IF first.constraint_name THEN DO;
7 drop_statement=catx(" ","alter table",libref,".",table_name
8 ,"drop constraint",constraint_name,";");
9 OUTPUT;
10 IF "&execute"="YES" THEN call execute(drop_statement);
11 END;
12RUN;
13 
14%mend mp_deleteconstraints;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright (c) 2001-2006 Rodney Sparapani