我想使用此查询更改varchar为varbinary(max)SQL Server:
ALTER TABLE [dbo].[Attachments]
ALTER COLUMN [Content] varbinary(max) NOT NULL
Run Code Online (Sandbox Code Playgroud)
但是这会引发以下异常:
不允许从数据类型varchar到varbinary(max)的隐式转换.使用CONVERT函数运行此查询
在这种情况下我应该改变什么?
你确定要varbinary(max)吗?如果是这样,我相信您需要按步骤执行此操作:
ALTER TABLE Attachments
ADD Content2 varbinary(max)
UPDATE Attachments
SET Content2 = CONVERT(varbinary(MAX),Content)
ALTER TABLE Attachments
DROP COLUMN Content
sp_RENAME 'Attachments.[Content2]' , '[Content]', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)
根据表的性质,通过选择将其转换为以下内容可能会更快:
SELECT Content = CAST(Content AS VARBINARY(MAX))
,other fields
INTO NewTable
FROM OldTable
Run Code Online (Sandbox Code Playgroud)
然后删除旧表并重命名新表:
DROP TABLE OldTable
GO
SP_RENAME 'NewTable', 'OldTable'
Run Code Online (Sandbox Code Playgroud)
您需要分阶段进行:
ALTER TABLE [dbo].[Attachments]
ADD [TempContent] varbinary(max)
go
UPDATE Attachements SET TempContent = CAST(Content as VARBINARY)
go
ALTER TABLE [dbo].[Attachments]
DROP COLUMN [Content]
go
sp_RENAME 'Attachements.[TempContent ]' , '[Content ]', 'COLUMN'
go
Run Code Online (Sandbox Code Playgroud)
您也可以在SQL Server Management Studio中执行此操作,如果启动分析器,它将显示使用的代码(总是有帮助)