Скрипт для создания или удаления всех первичных ключей в Netezza - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь создать скрипт, который будет отбрасывать все первичные ключи в моей базе данных Netezza. Нечто похожее на эту статью для SQL Server: https://social.technet.microsoft.com/wiki/contents/articles/2321.script-to-create-or-drop-all-primary-keys.aspx

Какой лучший способ сделать это? Я нашел другое решение, которое использует перекрестное применение, но, как и курсор, не поддерживается в Netezza. Спасибо!

1 Ответ

0 голосов
/ 14 сентября 2018

Вот, пожалуйста:

--DROP CONSTRAINTS
SELECT DISTINCT ' ALTER TABLE '||RTRIM(SCHEMA)||'.'||RELATION|| ' DROP CONSTRAINT ' 
|| constraintname || ' CASCADE;' from _V_RELATION_KEYDATA    
--optional: WHERE DATABASE=<DATABASE> 
--OR WHERE SCHEMA='<SCHEMANAME>;

--ADD PK CONSTRAINTS 
SELECT DISTINCT ' ALTER TABLE '||RTRIM(SCHEMA)||'.'||RELATION|| ' ADD CONSTRAINT '
|| constraintname || ' PRIMARY KEY('|| trim(trailing ',' from replace(replace
(XMLSerialize(XMLagg(XMLElement('X',attname)))
,'<X>','')
,'</X>',','))  ||' ) INITIALLY IMMEDIATE;' 
from _V_RELATION_KEYDATA    
GROUP BY SCHEMA,CONSTRAINTNAME, RELATION;
--optional: WHERE DATABASE=<DATABASE> 
--OR WHERE SCHEMA='<SCHEMANAME>;

Обязательно запустите --ADD PK Constraints и сохраните вывод DDL перед тем, как отбросить ограничения

...