Sql server 如何编写Alter Table并添加新列?

Sql server 如何编写Alter Table并添加新列?,sql-server,database,oracle,Sql Server,Database,Oracle,我有一个表,有3列a,B,C,其中也有行。列A是主键 现在根据新的要求,我需要添加新的D、E和F列 我还需要从A列中删除以前的主键,并为D列添加一个新的主键 列E和F为空 请帮助我创建alter table语句。您需要的是一个多步骤过程。添加列,删除现有的主键约束,最后添加一个新的约束 这里最困难的事情是添加列D。因为您希望它成为新的主键,所以它必须不为NULL。如果表中有现有数据,则需要处理此错误: SQL> alter table your_table 2 add ( d

我有一个表,有3列a,B,C,其中也有行。列A是主键

现在根据新的要求,我需要添加新的D、E和F列

我还需要从A列中删除以前的主键,并为D列添加一个新的主键

列E和F为空


请帮助我创建alter table语句。

您需要的是一个多步骤过程。添加列,删除现有的主键约束,最后添加一个新的约束

这里最困难的事情是添加列D。因为您希望它成为新的主键,所以它必须不为NULL。如果表中有现有数据,则需要处理此错误:

SQL> alter table your_table
  2     add ( d number not null
  3           , e date
  4           , f number )
  5  /
alter table your_table
            *
ERROR at line 1:
ORA-01758: table must be empty to add mandatory (NOT NULL) column


SQL>
因此,第1步是添加新列,其中D可选;然后用任何键值填充它:

SQL> alter table your_table
  2     add ( d number
  3           , e date
  4           , f number )
  5  /

Table altered.

SQL> update your_table
  2      set d = rownum
  3  /

1 row updated.

SQL>
现在我们可以强制设置D列:

SQL> alter table your_table
  2     modify d not null
  3  /

Table altered.

SQL>
最后,我们可以将主键列从A更改为D:

SQL> alter table your_table
  2      drop primary key
  3  /

Table altered.

SQL> alter table your_table
  2     add constraint yt_pk primary key (d)
  3  /

Table altered.

SQL>

对于某些更改,我们希望添加一个具有默认值的列。在这种情况下,可以一步完成:

alter table your_table
add new_col varchar2(1) default 'N' not null;
在Oracle的后期版本中,这实际上是一种非常高效的以相同值填充新列,比上面概述的多步骤方法快得多



如果不清楚,上面的语法是Oracle。我希望SQL Server也会类似。

-1在发布问题之前,先搜索并阅读基本文档。今天下载文档非常容易,而且应该是使用新技术首先要做的事情之一。