【问题标题】:T-SQL modify columnT-SQL 修改列
【发布时间】:2021-06-01 19:01:35
【问题描述】:

我想修改此列,但在 T-SQL 中不起作用:

create table logininfo
( 
    ID int primary key ,
    modepasse varchar(10) not null, 
)

我想将ID 的数据类型更改为varchar(20)

当我使用这个命令时:

alter table logininfo
    alter column ID varchar(10) 

它不起作用。

请帮帮我

【问题讨论】:

  • 如果您想要 varchar(20),为什么要更改列 ID varchar(10)?
  • 它不起作用是什么意思?你有错误吗?如果是这样:WHAT 错误?
  • 当您运行这些语句时,错误确实告诉您问题所在。不明白的错误呢?

标签: sql sql-server database


【解决方案1】:

你应该先删除Primary key, 最好按照以下语法创建表:

DROP TABLE IF EXISTS logininfo

CREATE TABLE logininfo
( 
    ID INT,
    modepasse VARCHAR(10) NOT NULL, 
    CONSTRAINT PK_logininfo PRIMARY KEY (ID)
)

如您所见,您可以在定义列并命名它们之后定义PK 和其他约束(有意义的名称) 现在你必须先删除 pk 然后更改列 ID

ALTER TABLE logininfo
DROP CONSTRAINT PK_logininfo ;

现在您可以更改所需的列:

ALTER TABLE logininfo
    ALTER COLUMN ID NVARCHAR(10) NOT NULL

如果您想再次将此列用作主键,则必须将其视为 NOT NULL

现在将其设置为主键:

ALTER TABLE logininfo
ADD CONSTRAINT PK_logininfo PRIMARY KEY (ID)

【讨论】:

    【解决方案2】:

    您需要先删除约束,然后才能更改列。

    ALTER TABLE logininfo DROP CONSTRAINT <constraint name>;
    

    您可以通过这种方式获取约束名称:

    SELECT [name] FROM sys.key_constraints WHERE parent_object_id = OBJECT_ID('logininfo');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多