6

我想用这个查询在 SQL Server中varchar更改:varbinary(max)

ALTER TABLE  [dbo].[Attachments]
ALTER COLUMN [Content]  varbinary(max)  NOT NULL

但这会引发以下异常:

不允许从数据类型 varchar 到 varbinary(max) 的隐式转换。使用 CONVERT 函数运行此查询

在这种情况下我应该改变什么?

4

3 回答 3

6

您确定要使用 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'

根据表格的性质,通过选择将其转换为:

SELECT Content = CAST(Content AS VARBINARY(MAX))
       ,other fields
INTO NewTable
FROM OldTable

然后删除旧表并重命名新表:

DROP TABLE OldTable
GO
SP_RENAME 'NewTable', 'OldTable'
于 2013-06-16T16:14:19.723 回答
5

您需要暂存该过程:

    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

您也可以在 SQL Server Management Studio 中执行此操作,如果您启动探查器,它将向您显示它使用的代码(总是有帮助的)

于 2013-06-16T16:16:42.673 回答
0

将文件插入数据库时​​使用此方法:

SqlCommand cmd = new SqlCommand("Insert into tblJobSeeker Values('"+txtUserName.Text+"',@Data)",con);
cmd.Parameters.AddWithValue("@Data",Filesize);
于 2015-08-05T12:24:14.827 回答