CREATE PROCEDURE SP_EditImage
@PrimaryKey nvarchar(50),
@PrimaryKeyValue int,
@Field nvarchar(50),
@FieldValue varbinary(max),
@TableName nvarchar(50)
AS
BEGIN
 declare @sql nvarchar(2000)
 set @sql='Update '+@TableName+' Set '+@Field+' = '+@FieldValue+' Where '+ @PrimaryKey +' = '+ @PrimaryKeyValue
 execute(@sql)
END
GO错误提示:
消息 402,级别 16,状态 1,过程 SP_EditImage,第 11 行
数据类型 nvarchar 和 varbinary(max) 在 add 运算符中不兼容。请问大家,如何解决啊????

解决方案 »

  1.   

    cast (@FieldValue as nvarchar(max))--楼主用的是05吧
      

  2.   


     如果楼主是要把二进制数据当作字符存储时,用邹老大这个:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[varbin2hexstr]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[varbin2hexstr]
    GO/*--varbinary转换成字符串

    --邹建 2004-09(引用请保留此信息)--*//*--测试示例 select dbo.varbin2hexstr(0x1432fad)
    --*/
    create function varbin2hexstr(
    @bin varbinary(8000)
    )returns varchar(8000)
    as
    begin
    declare @re varchar(8000),@i int
    select @re='',@i=datalength(@bin)
    while @i>0
    select @re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1)
    +substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1)
    +@re
    ,@i=@i-1
    return('0x'+@re)
    end
    go
      

  3.   


    --   varchar   中max用法--   测试一普通的varchar 
    declare   @str1   varchar(4001) 
    declare   @str2   varchar(4001) 
    select   @str1   =   replicate( '1 ',4001) 
    select   @str2   =   replicate( '2 ',4001) 
    select   len(@str1   +   @str2) --   8000 
    print   @str1 
    print   @str2 --   测试二  max的varchar 
    declare   @str1   varchar(4001) 
    declare   @str2   varchar(4001) 
    select   @str1   =   replicate( '1 ',4001) 
    select   @str2   =   replicate( '2 ',4001) 
    select   len(convert(varchar(max),@str1)+@str2) --   8002 
    select   len(convert(varchar(max),@str1)) --测试三
    declare   @str1   varchar(max) 
    select   @str1   =   replicate( '1 ',8006) 
    select   len(@str1) --   8000
      

  4.   


    select   len(convert(varchar(max),@str1)+@str2) --   8002 
      

  5.   

    set @sql='Update '+@TableName+' Set '+@Field+' = '+cast(@FieldValue as nvarchar)+' Where '+ @PrimaryKey +' = '+ @PrimaryKeyValue 
      

  6.   

    varbinary 是存放的一个图片数据,如果那么转换,还能显示是个图片吗
      

  7.   

    varbinary   先转换成varchar 再加