61%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks
64%let lib=%upcase(&lib);
66%let engine=%mf_getengine(&lib);
67%let schema=%mf_getschema(&lib);
69%let ds1=%mf_getuniquename(prefix=getpk_ds1);
70%let ds2=%mf_getuniquename(prefix=getpk_ds2);
71%let ds3=%mf_getuniquename(prefix=getpk_ds3);
72%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);
73%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);
74%let sum=%mf_getuniquename(prefix=getpk_sum);
75%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);
76%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);
77%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);
78%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);
81%
if &mdebug=1 %then %
do;
82 %put &sysmacroname entry vars:;
89 select libname as libref
90 ,upcase(memname) as dsn
100 from dictionary.columns
101 where upcase(libname)=
"&lib"
102%
if &ds ne 0 %then %
do;
103 and upcase(memname)=
"&ds"
108%
if &engine=SQLSVR %then %
do;
111 create table work.&ds2 as
112 select * from connection to &lib(
114 s.name as SchemaName,
117 ic.key_ordinal as KeyOrderNr
120 inner join sys.tables t on s.schema_id=t.schema_id
121 inner join sys.indexes i on t.object_id=i.object_id
122 inner join sys.index_columns ic on i.object_id=ic.object_id
123 and i.index_id=ic.index_id
124 inner join sys.columns tc on ic.object_id=tc.object_id
125 and ic.column_id=tc.column_id
126 where i.is_primary_key=1
127 and s.name=%str(%
')&schema%str(%')
128 order by t.name, ic.key_ordinal ;
129 );disconnect from &lib;
132 ,
case when b.name is not
null then 1
else 0 end as pk_ind
134 left join work.&ds2 b
136 and upcase(a.name)=upcase(b.name)
141 %if &ds = 0 %then %let dsn=;
144 %mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)
148 create table &pk4sure as
155 where constraint_type='PRIMARY'
164 ,count(a.column_name) as unq_cnt
165 ,count(b.column_name) as nul_cnt
166 from work.&ds2(where=(constraint_type ='UNIQUE')) a
167 left join work.&ds2(where=(constraint_type ='NOT NULL')) b
169 and a.table_name=b.table_name
170 and a.column_name=b.column_name
172 having unq_cnt=nul_cnt;
175 create table &pkdefault as
180 ,b.column_name as name
182 left join &ds2(where=(constraint_type ='UNIQUE')) b
184 and a.table_name=b.table_name
185 and a.constraint_name=b.constraint_name
189 create table &pkfromindex as
190 select libname as libref
191 ,memname as table_name
192 ,indxname as constraint_name
193 ,indxpos as constraint_order
195 from dictionary.indexes
196 where nomiss='yes' and unique='yes' and upcase(libname)=
"&lib"
197 %if &ds ne 0 %then %do;
198 and upcase(memname)=
"&ds"
204 set &pkdefault &pk4sure &pkfromindex;
207 by libref table_name constraint_name;
209 if first.table_name then keepme=1;
210 if first.constraint_name and not first.table_name then keepme=0;
219 ,case when b.pk_ind=1 then 1 else 0 end as pk_ind
221 left join work.&finalpks b
223 and a.dsn=b.table_name
224 and upcase(a.name)=upcase(b.name)
225 order by libref,dsn,constraint_order;
231create table work.&tabs1 as select
233 ,upcase(memname) as dsn
235%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;
239 ,'n/a' as dbms_memtype format=$32.
245from dictionary.tables
246 where upcase(libname)=
"&lib"
247%if &ds ne 0 %then %do;
248 and upcase(memname)=
"&ds"
253 length pk_fields $512;
255 by libref dsn constraint_order;
256 if first.dsn then pk_fields='';
257 if pk_ind=1 then pk_fields=catx(
' ',pk_fields,name);
258 if last.dsn then output;
262create table &outds as
273 left join work.&tabs2 b
279 &ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,