我有一个带有 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/