Скрипт для создания или удаления всех первичных ключей в Netezza

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

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


person Arthur    schedule 05.09.2018    source источник
comment
Могу я спросить, почему вы хотите это сделать?   -  person ScottMcG    schedule 06.09.2018
comment
Потому что у меня есть две базы данных с одинаковыми таблицами. У Netezza есть ключи, у SQL Server их нет. Мне нужно применить первичные ключи к базе данных SQL Server.   -  person Arthur    schedule 06.09.2018


Ответы (1)


Ну вот:

--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, прежде чем удалять ограничения.

person meshwerk    schedule 14.09.2018