Veröffentlicht am :

Makro zum Löschen von Tabellenbeschränkungen

Dieser Code ist auch verfügbar auf: English Español Français
Attention : Dieser Code erfordert Administratorrechte.
Das Makro `mp_deleteconstraints` wurde entwickelt, um den Prozess des Löschens von Beschränkungen aus SAS©-Tabellen zu automatisieren. Es nimmt einen SAS©-Datensatz (`inds`) als Eingabe entgegen, der detaillierte Informationen über die zu zielenden Beschränkungen (wie Bibliothek, Tabellenname und Beschränkungsname) enthält. Nach einer vorherigen Sortierung des Eingabedatensatzes durchläuft ein `DATA STEP` diese Informationen, um die entsprechenden SQL-Anweisungen `ALTER TABLE ... DROP CONSTRAINT` zu erstellen. Die Ausführung dieser Anweisungen ist an den Wert des Parameters `execute` gebunden. Wenn `execute` auf 'YES' gesetzt ist, verwendet das Makro `CALL EXECUTE`, um die SQL-Befehle an den Server zu senden und so die Struktur der Tabellen zu ändern. Der Ausgabedatensatz (`outds`) enthält die generierten SQL-Anweisungen, unabhängig davon, ob sie ausgeführt wurden oder nicht.
Datenanalyse

Type : INTERNE


Das Makro `mp_deleteconstraints` verarbeitet einen SAS-Datensatz, der über den Parameter `inds=` bereitgestellt werden muss. Dieser Datensatz ist normalerweise das Ergebnis einer anderen SAS-Prozedur oder eines Makros (wie `mp_getconstraints`, das im Header erwähnt wird), das die Metadaten der vorhandenen SAS-Tabellenbeschränkungen extrahiert. Das Anwendungsbeispiel in den Kommentaren deutet darauf hin, dass der Eingabedatensatz aus temporären Tabellen (`work.example`) erstellt werden kann, was auf eine interne Datenverwaltung im SAS-System und nicht auf einen direkten Import externer Dateien hindeutet.

1 Codeblock
Macro Définition et PROC SORT
Erklärung :
Dieser Block initialisiert das Makro `mp_deleteconstraints` und definiert seine drei Parameter: `inds` für den Eingabedatensatz der Beschränkungen, `outds` für den sortierten Ausgabedatensatz und `execute` zur Steuerung der Ausführung der SQL-Befehle. Die Prozedur `PROC SORT` wird anschließend verwendet, um den Eingabedatensatz (`&inds`) nach den Variablen `libref`, `table_name` und `constraint_name` zu sortieren. Der sortierte Datensatz wird unter dem durch `&outds` angegebenen Namen gespeichert.
Kopiert!
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 Codeblock
DATA STEP
Erklärung :
Dieser `DATA STEP` verarbeitet den sortierten Datensatz und generiert für jede eindeutige Beschränkung (erkannt durch `first.constraint_name`) eine SQL-Anweisung `ALTER TABLE ... DROP CONSTRAINT`. Die Variable `drop_statement` wird erstellt, um diese Anweisung zu speichern. Wenn der Parameter `execute` des Makros 'YES' ist, wird der Befehl `CALL EXECUTE('proc sql;')` nur einmal zu Beginn des `DATA STEP` verwendet, um einen SQL-Block zu öffnen, und `CALL EXECUTE(drop_statement)` führt jede generierte Anweisung zum Löschen der Beschränkung aus. Der `DATA STEP` schreibt die generierten Anweisungen auch in den Ausgabedatensatz `&outds`.
Kopiert!
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;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright (c) 2001-2006 Rodney Sparapani