使用变量更新图像列

时间:2013-02-07 01:26:44

标签: sql image sql-server-2008

我需要将图像列的值从一行复制到另一行。我尝试使用变量,但我甚至不能声明那种变量。 SQL Server返回此错误消息:

  

Msg 2739,Level 16,State 1,Line 1
  text,ntext和image数据类型对局部变量无效。

1 个答案:

答案 0 :(得分:2)

我们已弃用image数据类型,因此您应该更改表格和所有代码以使用varbinary(max)(您将 执行此操作有一点,越快越好。在此期间,一个简单的解决方法是在变量中使用varbinary(max)

DECLARE @x TABLE(i IMAGE);

INSERT @x SELECT 0x0045;

DECLARE @y VARBINARY(MAX);

SELECT @y = i FROM @x;

PRINT @y;

-- UPDATE sometable SET somecolumn = @y WHERE ...;

但是,如果您正在执行更新,为什么首先需要使用中间变量?您可以很容易地在同一个表中连接两行......

UPDATE t
  SET t.image_column = s.image_column
  FROM dbo.table AS t
  INNER JOIN dbo.table AS s
  ON t.key = something
  AND s.key = something_else;

样品:

DECLARE @x TABLE(x INT PRIMARY KEY, i IMAGE);

INSERT @x SELECT 1,0x0045;
INSERT @x SELECT 2,0x0055;

UPDATE x SET x.i = y.i
  FROM @x AS x
  INNER JOIN @x AS y
  ON x.x = 1 AND y.x = 2;

SELECT x,i FROM @x;

结果:

x   i
--- ------
1   0x0055
2   0x0055