首页 > 解决方案 > 如何通过存储过程更新图像

问题描述

我有一个表格,其中有一列图像类型。我正在cid动态获取模式名称(这里是 )。我正在尝试更新图像列,如下所示

SET @SQL1 = 'UPDATE ' + QUOTENAME(@cid) + '.[QueenBase].[queen_user] ' + 
            'SET [resizedimage] = ' + CAST(@resizedimage AS image) + 
            ' WHERE userid = ''' + CAST(@userid AS VARCHAR(30)) + '''';

EXEC sys.sp_executesql @SQL1;

我收到一个错误:

数据类型 nvarchar 和 image 在 add 运算符中不兼容。

我在哪里做错了?更新图像的正确方法是什么?

标签: sqlsql-servertsqlstored-procedures

解决方案


这里有2个问题。

  1. 您正在使用image数据类型。已于2005 年(即16image年前)弃用,不应使用。使用.varbinary(MAX)
  2. 您正在注入参数。参数化你的参数(当我这么说的时候看起来很傻,对吧?),不要注入它们。这就是你错误的原因。

如果我们解决这两个问题,我们最终会得到以下结果:

SET @SQL1 = N'UPDATE '+QUOTENAME(@cid) + N'.[QueenBase].[queen_user] SET [resizedimage]=@resizedimage WHERE userid=@userid;';
EXEC sys.sp_executesql @SQL1, N'@resizedimage varbinary(MAX), @userid int', @resizedimage, @userid; --Data type of @userid guessed. Correct as needed

推荐阅读