60%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks
63%let lib=%upcase(&lib);
65%let engine=%mf_getengine(&lib);
66%let schema=%mf_getschema(&lib);
68%let ds1=%mf_getuniquename(prefix=getpk_ds1);
69%let ds2=%mf_getuniquename(prefix=getpk_ds2);
70%let ds3=%mf_getuniquename(prefix=getpk_ds3);
71%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);
72%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);
73%let sum=%mf_getuniquename(prefix=getpk_sum);
74%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);
75%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);
76%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);
77%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);
80%
if &mdebug=1 %then %
do;
81 %put &sysmacroname entry vars:;
88 select libname as libref
89 ,upcase(memname) as dsn
99 from dictionary.columns
100 where upcase(libname)=
"&lib"
101%
if &ds ne 0 %then %
do;
102 and upcase(memname)=
"&ds"
107%
if &engine=SQLSVR %then %
do;
110 create table work.&ds2 as
111 select * from connection to &lib(
113 s.name as SchemaName,
116 ic.key_ordinal as KeyOrderNr
119 inner join sys.tables t on s.schema_id=t.schema_id
120 inner join sys.indexes i on t.object_id=i.object_id
121 inner join sys.index_columns ic on i.object_id=ic.object_id
122 and i.index_id=ic.index_id
123 inner join sys.columns tc on ic.object_id=tc.object_id
124 and ic.column_id=tc.column_id
125 where i.is_primary_key=1
126 and s.name=%str(%
')&schema%str(%')
127 order by t.name, ic.key_ordinal ;
128 );disconnect from &lib;
131 ,
case when b.name is not
null then 1
else 0 end as pk_ind
133 left join work.&ds2 b
135 and upcase(a.name)=upcase(b.name)
140 %if &ds = 0 %then %let dsn=;
143 %mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)
147 create table &pk4sure as
154 where constraint_type='PRIMARY'
163 ,count(a.column_name) as unq_cnt
164 ,count(b.column_name) as nul_cnt
165 from work.&ds2(where=(constraint_type ='UNIQUE')) a
166 left join work.&ds2(where=(constraint_type ='NOT NULL')) b
168 and a.table_name=b.table_name
169 and a.column_name=b.column_name
171 having unq_cnt=nul_cnt;
174 create table &pkdefault as
179 ,b.column_name as name
181 left join &ds2(where=(constraint_type ='UNIQUE')) b
183 and a.table_name=b.table_name
184 and a.constraint_name=b.constraint_name
188 create table &pkfromindex as
189 select libname as libref
190 ,memname as table_name
191 ,indxname as constraint_name
192 ,indxpos as constraint_order
194 from dictionary.indexes
195 where nomiss='yes' and unique='yes' and upcase(libname)="&lib"
196 %if &ds ne 0 %then %do;
197 and upcase(memname)="&ds"
203 set &pkdefault &pk4sure &pkfromindex;
206 by libref table_name constraint_name;
208 if first.table_name then keepme=1;
209 if first.constraint_name and not first.table_name then keepme=0;
218 ,case when b.pk_ind=1 then 1 else 0 end as pk_ind
220 left join work.&finalpks b
222 and a.dsn=b.table_name
223 and upcase(a.name)=upcase(b.name)
224 order by libref,dsn,constraint_order;
230create table work.&tabs1 as select
232 ,upcase(memname) as dsn
234%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;
238 ,'n/a' as dbms_memtype format=$32.
244from dictionary.tables
245 where upcase(libname)="&lib"
246%if &ds ne 0 %then %do;
247 and upcase(memname)="&ds"
252 length pk_fields $512;
254 by libref dsn constraint_order;
255 if first.dsn then pk_fields='';
256 if pk_ind=1 then pk_fields=catx(' ',pk_fields,name);
257 if last.dsn then output;
261create table &outds as
272 left join work.&tabs2 b
278 &ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,