【问题标题】:Alter column drops index更改列删除索引
【发布时间】:2009-10-30 10:08:51
【问题描述】:

我有一张桌子

CREATE TABLE table1(
 [classe] [char](30) NOT NULL,
 [code] [char](30) NOT NULL,
 [description] [varchar](255) NULL,
 [codelangue] [char](2) NULL
) ON [PRIMARY]

有索引

CREATE NONCLUSTERED INDEX [table1_id1] ON [dbo].[table1] 
(
 [codelangue] ASC,
 [classe] ASC,
 [code] ASC
)
INCLUDE ( [description]) WITH (PAD_INDEX  = OFF, 
STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, 
IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, 
ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

当我这样做时

ALTER TABLE table1
ALTER COLUMN codelangue [char](2) NOT NULL

它会删除索引和相关的统计数据。

知道为什么吗?

【问题讨论】:

    标签: sql sql-server sql-server-2005 indexing


    【解决方案1】:
    ALTER TABLE table
    

    我认为这应该是“table1”而不是“table”?

    在我安装 SQL Server 2005 时,此代码生成错误:

    Msg 5074, Level 16, State 1, Line 1
    The index 'table1_id1' is dependent on column 'codelangue'.
    Msg 4922, Level 16, State 9, Line 1
    ALTER TABLE ALTER COLUMN codelangue failed because one or 
    more objects access this column.
    

    【讨论】:

    • 如果重新创建索引并以 NULL 传递列,然后我重试以 NOT NULL 传递它,我得到同样的错误......但不是第一次,我不明白为什么。 ...
    • 是的,这里也一样 - 我无法执行该语句来更改表的列
    【解决方案2】:

    不同的表(例如 bob.table1 而不是 dbo.table1)或不同的数据库。

    ALTER 不会在我熟悉的任何 SQL Server 版本上执行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2015-08-11
      • 2014-12-09
      • 1970-01-01
      • 2019-10-23
      • 2015-07-07
      相关资源
      最近更新 更多