【问题标题】:Is it possible to have a nvarchar(max) and a varbinar(max) fields in same table是否可以在同一个表中有一个 nvarchar(max) 和 varbinary(max) 字段
【发布时间】:2010-10-15 14:36:49
【问题描述】:

我使用的是 SQL Server 2008 R2。

我有一个表,其中包含多个字段,包括一个 nvarchar(max) 字段。

当我尝试添加类型为 varbinary(max) 的新字段时,我收到一条错误消息:“不允许保存更改。您所做的更改需要删除并重新创建以下表格”。

是否可以在同一个表中有一个 nvarchar(max) 和一个 varbinar(max) 字段?

解决这个问题的唯一方法是创建一个具有新结构的新表并传输数据吗?

【问题讨论】:

  • 您用来进行更改的脚本是什么?

标签: sql-server sql-server-2008-r2 varcharmax varbinarymax


【解决方案1】:

当然可以 - 您可能只是在 SSMS 中启用了这个新的“安全”选项(默认情况下它是打开的):

这是Tools > Options ....

【讨论】:

  • 我刚刚进行了测试,启用此选项后,您只会在 SSMS 在幕后重新创建整个表时看到消息。如果该列被添加到表的末尾,您不会收到此消息。
【解决方案2】:

是的,这是可能的。

如果您看到此消息,您一定是尝试在 SSMS 表设计器中的现有列中间插入新列。将其添加到现有列的末尾,则不必完全重建表。

或者直接执行

alter table YourTable add newcol varbinary(max) null

【讨论】:

  • 我取消删除了您的答案并恢复为原始答案,因为这正是我试图在现有字段中间添加字段的问题。 “防止保存更改”也有效。谢谢
  • @Shiraz - 是的,出于某种原因,我设法让自己对此感到困惑,并说服自己答案是错误的!
【解决方案3】:

转到Tools | Options > Designers 并取消选中“防止保存需要重新创建表的更改”选项

【讨论】:

    【解决方案4】:

    SQL Server 不允许您以这种方式演化表,因为它无法动态修改现有表的存储。如果您想这样做,您必须使用新架构创建一个新表,并使用原始表中的数据填充它。

    【讨论】:

    • 我猜他只是关闭了重新创建表,而 SQL Server 必须重新创建表。好收获!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 2012-09-23
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多