-2

请帮忙,如何纠正这个程序?

现在,我收到一个错误:

不允许从数据类型 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 )
4

2 回答 2

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)
于 2013-10-30T09:27:04.580 回答
0

当 SQL Server 试图执行从空字符串 ( '') 到varbinary(max)该错误的转换时。唯一的办法是避免隐式转换。如果您需要将空字符串转换为 varbinary 类型,请使用cast(@your_variable as varbinary(max))构造(在上面调用 SP 的代码中SP_FILEUPLOAD)。

于 2013-10-30T11:12:32.420 回答