sql - 如何将 BINARY(8000) 列转换为 VARBINARY(MAX)

标签 sql sql-server-2008 tsql

我有一个带有 BINARY(8000) 的现有表柱子。我试图做这样的事情:

ALTER TABLE [Member] 
  ALTER COLUMN [PublicCertificate] VARBINARY(MAX)

我明白了:

Msg 511, Level 16, State 1, Line 1
Cannot create a row of size 8086 which is greater than the allowable maximum row size of 8060. The statement has been terminated.



我明白 BINARY(8000)总是返回 8000 的长度,并且 + 其他 3 列是 >= 8086 .有没有ALTER COLUMN如何做到这一点?除了删除表格并重新开始之外还有其他方法吗?这确实有效,但在我看来是一个不优雅的解决方案。

最佳答案

更新:感谢您的建议。第一个给了我解决方案的想法。这就是我所做的:

1) CREATE TABLE [MemberTemp] (
[ID] [int] IDENTITY(1,1) NOT NULL,
[PublicCertificate] [varbinary](max) NULL
)

2) SET IDENTITY_INSERT [MemberTemp] ON

3) INSERT INTO [MemberTemp] ( [ID], [PublicCertificate] )
     SELECT [ID], [PublicCertificate] FROM [Member]

4) ALTER TABLE [Member] DROP COLUMN [PublicCertificate]

5) ALTER TABLE [Member] ADD [PublicCertificate] VARBINARY(MAX)

6) I went to the clustered index ran Rebuild to free space...

7) UPDATE [Member] SET [PublicCertificate] = [MemberTemp].PublicCertificate
   FROM [Member]
   INNER JOIN [MemberTemp] on [Member].[ID] = [MemberTemp].ID

砰!做到了。

关于sql - 如何将 BINARY(8000) 列转换为 VARBINARY(MAX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17930279/

相关文章:

c# - Nhibernate 转义 linq 查询中的特殊字符

sql - 线程安全的sql事务,如何在事务期间锁定特定行?

sql - 行锁 - 手动使用它们

sql-server - 将逗号分隔值拆分为行

SQL服务器错误: The INSERT statement conflicted with the CHECK constraint

sql-server - 最近 6 个月使用 t-sql 在 SQL Server 中重复记录?

mysql - 从 MySQL 数据库中选择数据

mysql - SQL - 按设备类型获取平均计数

sql - 如何在Postgres的create index语句中使用嵌套查询的输出

database - 在网络驱动器上备份 SQL Server 2008 数据库