【问题标题】:Why does SSMS drop and recreate a table when attempting to Alter a column from varchar(8000) to varchar(MAX)?尝试将列从 varchar(8000) 更改为 varchar(MAX) 时,为什么 SSMS 会删除并重新创建表?
【发布时间】:2016-09-07 16:39:43
【问题描述】:

当尝试将表中的列从 varchar(8000) 更改为 varchar(MAX) 时,SSMS 会生成一个脚本,该脚本会删除表上的约束,创建一个新表,将旧表中的所有数据插入到new,从旧表中删除外键,删除旧表,重命名新表,然后在新表上重新创建外键。这通常比仅运行“ALTER TABLE TableA ALTER COLUMN ColumnA varchar(MAX)”更安全吗?我什么时候想运行 SSMS 生成的脚本与“ALTER TABLE TableA ALTER COLUMN ColumnA varchar(MAX)”脚本?

【问题讨论】:

  • 我认为我们无法回答原因 - 这当然取决于 SSMS/Microsoft 脚本引擎的设计者。我们只能猜测。
  • 这个问题不是关于如何强制 SSMS 创建更简单的脚本。我在问一个脚本是否比另一个更安全,或者它们在功能上是否相同。
  • 在那种情况下,我想不出您何时想要运行自动生成的版本,几乎总是有一种更明智的方式来编写任何可能的更改,因为您建议更改列就地,或者最坏的情况是删除键和约束,添加新列,移动值,删除旧列,重命名新列,重新创建约束。
  • @Chris - 如果您转到已链接到的问题,您会看到尽管有标题,但它还会询问 SSMS 这样做是否有原因,就像您问的那样。接受的答案也非常相关。

标签: sql-server ssms


【解决方案1】:

它们在功能上并不相同。 VARCHAR(8000) 最多有 8,000 个字符。 VARCHAR(MAX) 在技术上最多可以存储 2^31 - 1 (2,147,483,647) 个字符。

https://technet.microsoft.com/en-us/library/ms176089(v=sql.110).aspx

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 2013-06-17
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多