Sql server 如何制作过程插入

Sql server 如何制作过程插入,sql-server,Sql Server,请帮助,如何更正此过程 现在,我得到一个错误: 不允许从数据类型varchar隐式转换为varbinary(max)。使用CONVERT函数运行此查询 代码: 以下是表格结构 [dbo].[APPUSERDTL]( [UID] [int] NOT NULL, [APPCODE] [varchar](50) NULL, [APPEXPIRED] [datetime] NULL, [SIGNIMAGE] [image] NULL,

请帮助,如何更正此过程

现在,我得到一个错误:

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

代码:

以下是表格结构

[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 )

似乎您正在将
varchar
值传递给
@SIGNFILE
参数

请检查您传递的值

你可以复制这个问题

declare @test varbinary(max)=''
select @test
更新

为什么要将
''
传递给insert语句?它将考虑所有的值,如“代码> 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)

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

DB表中列SIGNFILE的数据类型是什么?旁注:存储过程中不应使用
sp_uu
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!在哪里调用存储过程?你能用这个更新你的问题吗?此外,表格定义将有助于发现问题!此表架构……[dbo].[APPUSERDTL]([UID][int]不为NULL,[APPCODE][varchar](50)NULL,[APPEXPIRED][datetime]NULL,[SIGNIMAGE][image]NULL,[SIGNFILE][varbinary](max)NULL,[HEADUID][int int NULL PRINCIPALFROM][money]不为NULL,[PRINCIPALTO money]不为NULL,[EXCEPTIONUSER][bit]不为NULL,[LastUpdate][datetime]不是Null如何创建过程插入?我是plisnewbie@arifpratama:只需删除值中的
'
,并传递参数Simplicit将空字符串转换为varbinary将失败。这将不起作用。请尝试
声明@test varbinary(max)=''选择强制转换(@test as varbinary(max))
您不能
将空字符串转换为
varbinary
!!!当然可以。但如果您将以另一种方式编写它,即
声明@x varchar(max)='',@test varbinary(max);选择@test=cast(@x为varbinary(max))这将是很好的,这就是答案…这个问题是OP把所有的参数传递到<代码> >代码>中插入语句,这导致所有的代码都被认为是<代码> 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)