用于在Netezza中创建或删除所有主键的脚本

问题描述 投票:1回答:1

我正在尝试创建一个脚本,它将删除并创建我的Netezza数据库中的所有主键。类似于SQL Server的这篇文章:https://social.technet.microsoft.com/wiki/contents/articles/2321.script-to-create-or-drop-all-primary-keys.aspx

最好的方法是什么?我找到了另一种使用交叉应用的解决方案,但是像光标一样,Netezza不支持。谢谢!

sql metadata netezza information-schema
1个回答
0
投票

干得好:

--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约束并保存DDL输出

© www.soinside.com 2019 - 2024. All rights reserved.