Altering Table Schema

Considerations for altering the table schema.

  • add, drop, modify, and lock subclauses are useful when changing an existing table’s schema. A single statement can contain any number of these subclauses, in any order, as long as the same column name is not referenced more than once in the statement.
  • If stored procedures using select * reference a table that has been altered, no new columns appear in the result set, even if you use the with recompile option. You must drop the procedure and re-create it to include these new columns.

  • To ensure that triggers fire properly, drop and re-create all triggers on an altered table after you perform an add, drop, modify, or lock operation.

  • The SAP ASE server issues an error message if you add a not null column with alter table.

  • You cannot drop all the columns in a table. Also, you cannot drop the last remaining column from a table (for example, if you drop four columns from a five-column table, you cannot then drop the remaining column). To remove a table from the database, use drop table.

  • A data copy is required:
    • To drop a column

    • To add a NOT NULL column

    • For most alter table ... modify commands

    Use set noexec on and showplan on options to determine if a data copy is required for a particular alter table command.

  • You can specify a change in the locking scheme for the modified table with other alter table commands (add, drop, or modify) when the other alter table command requires a data copy.

  • If alter table performs a data copy, select into /bulkcopy/pllsort must be turned on in the database that includes the table whose schema you are changing.

  • The modified table retains the existing space management properties (max_rows_per_page, fillfactor, and so on) and indexes of the table.

  • alter table that requires a data copy does not fire any triggers.

  • You can use alter table to change the schema of remote proxy tables created and maintained by CIS. See the Component Integration Services Users Guide.

  • You cannot perform a data copy and add a table level or referential integrity constraint in the same statement.

  • You cannot perform a data copy and create a clustered index in the same statement.

  • If you add a not null column, you must also specify a default clause. This rule has one exception: if you add a user-defined type column, and the type has a default bound to it, you need not specify a default clause.

  • You can always add, drop, or modify a column in allpages-locked tables. However, there are restrictions for adding, dropping, or modifying a column in a data-only-locked table, which are described in the following table:

    Type of Index

    All Pages Locked, Partitioned Table

    All Pages Locked, Unpartitioned Table

    Data-Only-Locked, Partitioned Table

    Data-Only-Locked, Unpartitioned Table

    Clustered

    Yes

    Yes

    No

    Yes

    Nonclustered

    Yes

    Yes

    Yes

    Yes

    If you need to add, drop, or modify a column in a data-only-locked table partitioned with a clustered index, you can:
    1. Drop the clustered index.

    2. Alter the data-only-locked table.

    3. Re-create the clustered index.

  • You cannot add a NOT NULL Java object as a column. By default, all Java columns always have a default value of NULL, and are stored as either varbinary strings or as image datatypes.

  • You cannot modify a partitioned table that contains a Java column if the modification requires a data copy. Instead, first unpartition the table, execute alter table, then repartition the table.

  • You cannot drop the key column from an index or a referential integrity constraint. To drop a key column, first drop the index or referential integrity constraint, then drop the key column. See the Transact-SQL Users Guide.

  • You can drop columns that have defaults or rules bound to them. Any column-specific defaults are also dropped when you drop the column. You cannot drop columns that have check constraints or referential constraints bound to them. Instead, first drop the check constraint or referential constraint, then drop the column. Use sp_helpconstraint to identify any constraints on a table, and use sp_depends to identify any column-level dependencies.

  • You cannot drop a column from a system table. Also, you cannot drop columns from user tables that are created and used by SAP-provided tools and stored procedures.

  • You can generally modify the datatype of an existing column to any other datatype if the table is empty. If the table is not empty, you can modify the datatype to any datatype that is explicitly convertible to the original datatype.

  • You can:
    • Add a new IDENTITY column.

    • Drop an existing IDENTITY column.

    • Modify the size of an existing IDENTITY.

    See the Transact-SQL Users Guide for more information.

  • Altering the schema of a table increments the schema count, causing existing stored procedures that access this table to be renormalized the next time they are executed. Changes in datatype-dependent stored procedures or views may fail with datatype normalization errors. Update these dependent objects so they refer to the modified schema of the table.