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 运算符中不兼容。请问大家,如何解决啊????
@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 运算符中不兼容。请问大家,如何解决啊????
如果楼主是要把二进制数据当作字符存储时,用邹老大这个: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
-- 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
select len(convert(varchar(max),@str1)+@str2) -- 8002