如何插入程序

时间:2013-10-30 09:22:30

标签: sql-server

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

现在,我收到了一个错误:

  

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

2 个答案:

答案 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)。