有Teradata的在线资源,如SO,数据库管理员(Stack Exhcange)和Teradata Developer Exchange。这些可能是你最好的信息来源。
页Teradata数据SQL数据定义语言的43 - 详细主题手册为Teradata 13.10状态:
You can not add an identity column to an existing base table, nor can you add the identity column attribute to an existing column.
它可能看起来繁琐,但这种方法效果非常好,最大限度地减少了数据的停机时间最终用户。它运行良好,并且是在对数十亿行的表进行数据模型更改时使用的首选方法。将数据插入新表应该进行相当好的优化,因为Teradata优化器应该选择数据块级MERGE操作而不是逐行操作。
- 与标识列创建新表
- 确保原始表的目标表更改举行。
- 插入从旧表中选择数据到新表中。
- 将{orig_table}重命名为{orig_table} _old。
- 将{new_table}重命名为{orig_table}。
- 验证新表格的数据并删除{orig_table} _old
- 刷新1:1视图的视图定义以引入标识列。 (可选)
希望这会有所帮助。
如果您需要扩展超出允许修改位置的列的数据类型,您可以尝试的另一种解决方案。 (例如DECIMAL(3,0) - > DECIMAL(5,0)):
ALTER TABLE {MyTable} ADD {Orig_ColumnName}_New DECIMAL(5,0) NULL;
UPDATE {MyTable} SET {Orig_ColumnName}_New = {Orig_Column};
ALTER TABLE {MyTable} DROP {Orig_ColumnName};
ALTER TABLE {MyTable} RENAME {Orig_ColumnName}_New AS {Orig_ColumnName};
ALTER TABLE {MyTable} ADD {Orig_ColumnName} NOT NULL; /* If original column was NOT NULL */
说明用于扩展列的数据类型的边界的规则可以在Teradata DDL手册中找到。
我忘记了'Rename'选项存在,否则在你做之前会回答这个问题;) – emaillenin 2011-12-24 15:17:30
你的整个答案基本上总结了我的问题的最后一段。总之,你提出的方法是我试图避免的确切方法。 – oscilatingcretin 2011-12-24 15:32:11
@oscilatingcretin nope。不同之处在于表格的停机时间。在重命名方法中,您几乎没有停机时间 – emaillenin 2011-12-24 16:14:05