请帮忙,如何纠正这个程序??
现在,我收到了一个错误:
不允许从数据类型varchar到varbinary(max)的隐式转换。使用CONVERT函数运行此查询。
代码:
CREATE PROCEDURE SP_FILEUPLOAD
@UID int,
@APPCODE varchar(50) = NULL ,
@APPEXPIRED datetime = NULL ,
@SIGNIMAGE image = NULL ,
@SIGNFILE varbinary(MAX) = NULL ,
@HEADUID int,
@PRINCIPALFROM money,
@PRINCIPALTO money,
@EXCEPTIONUSER bit,
@LastUpdate datetime
AS
BEGIN
SET NOCOUNT ON
INSERT INTO APPUSERDTL
(UID,
APPCODE,
APPEXPIRED,
SIGNIMAGE,
SIGNFILE,
HEADUID,
PRINCIPALFROM,
PRINCIPALTO,
EXCEPTIONUSER,
LastUpdate)
VALUES('@UID',
'@APPCODE',
'@APPEXPIRED',
'@SIGNIMAGE',
'@SIGNFILE',
'@HEADUID',
'@PRINCIPALFROM',
'@PRINCIPALTO',
'@EXCEPTIONUSER',
'@LastUpdate')
END
GO
以下是表格结构
[dbo].[APPUSERDTL](
[UID] [int] NOT NULL,
[APPCODE] [varchar](50) NULL,
[APPEXPIRED] [datetime] NULL,
[SIGNIMAGE] [image] NULL,
[SIGNFILE] [varbinary](max) NULL,
[HEADUID] [int] NULL,
[PRINCIPALFROM] [money] NOT NULL,
[PRINCIPALTO] [money] NOT NULL,
[EXCEPTIONUSER] [bit] NOT NULL,
[LastUpdate] [datetime] NOT NULL )
答案 0 :(得分:1)
您似乎正在将varchar
值传递给@SIGNFILE
参数。
请检查您传递的值
例如。您可以复制此问题
declare @test varbinary(max)=''
select @test
的更新强> 的
为什么要使用''
传递插入语句?如果您在引号内使用,它会将所有值都视为varchar
。删除引号并尝试
您可以执行以下操作
INSERT INTO APPUSERDTL
(UID,
APPCODE,
APPEXPIRED,
SIGNIMAGE,
SIGNFILE,
HEADUID,
PRINCIPALFROM,
PRINCIPALTO,
EXCEPTIONUSER,
LastUpdate)
VALUES(@UID,
@APPCODE,
@APPEXPIRED,
@SIGNIMAGE,
@SIGNFILE,
@HEADUID,
@PRINCIPALFROM,
@PRINCIPALTO,
@EXCEPTIONUSER,
@LastUpdate)
答案 1 :(得分:0)
当SQL Server尝试执行从空字符串(''
)到varbinary(max)
的转换时,发生了错误。唯一的方法是避免隐式转换。如果需要将空字符串转换为varbinary类型,请使用cast(@your_variable as varbinary(max))
构造(在上面的代码中,您从中调用SP SP_FILEUPLOAD
)。