1
0
mirror of https://github.com/sasjs/core.git synced 2025-12-10 22:14:35 +00:00
Files
core/base/mp_createconstraints.sas
2023-08-18 08:34:53 +01:00

71 lines
2.2 KiB
SAS

/**
@file mp_createconstraints.sas
@brief Creates constraints
@details Takes the output from mp_getconstraints.sas as input
proc sql;
create table work.example(
TX_FROM float format=datetime19.,
DD_TYPE char(16),
DD_SOURCE char(2048),
DD_SHORTDESC char(256),
constraint pk primary key(tx_from, dd_type,dd_source),
constraint unq unique(tx_from, dd_type),
constraint nnn not null(DD_SHORTDESC)
);
%mp_getconstraints(lib=work,ds=example,outds=work.constraints)
%mp_deleteconstraints(inds=work.constraints,outds=dropped,execute=YES)
%mp_createconstraints(inds=work.constraints,outds=created,execute=YES)
@param [in] inds= (work.mp_getconstraints) The input table containing the
constraint info
@param [out] outds= (work.mp_createconstraints) A table containing the create
statements (create_statement column)
@param [in] execute= (NO) To actually create, use YES.
<h4> Related Files </h4>
@li mp_getconstraints.sas
@version 9.2
@author Allan Bowe
**/
%macro mp_createconstraints(inds=mp_getconstraints
,outds=work.mp_createconstraints
,execute=NO
)/*/STORE SOURCE*/;
proc sort data=&inds out=&outds;
by libref table_name constraint_name;
run;
data &outds;
set &outds;
by libref table_name constraint_name;
length create_statement $500;
if _n_=1 and "&execute"="YES" then call execute('proc sql;');
if first.constraint_name then do;
if constraint_type='PRIMARY' then type='PRIMARY KEY';
else type=constraint_type;
create_statement=catx(" ","alter table",libref,".",table_name
,"add constraint",constraint_name,type,"(");
if last.constraint_name then
create_statement=cats(create_statement,column_name,");");
else create_statement=cats(create_statement,column_name,",");
if "&execute"="YES" then call execute(create_statement);
end;
else if last.constraint_name then do;
create_statement=cats(column_name,");");
if "&execute"="YES" then call execute(create_statement);
end;
else do;
create_statement=cats(column_name,",");
if "&execute"="YES" then call execute(create_statement);
end;
output;
run;
%mend mp_createconstraints;