0

画像列の値をある行から別の行にコピーする必要があります。そのために変数を使おうとしましたが、そのタイプの変数を宣言することすらできません。SQLServerは次のエラーメッセージを返しました。

メッセージ2739、レベル16、状態1、行1
text、ntext、およびimageデータ型はローカル変数に対して無効です。

4

1 に答える 1

3

データ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 ...;

しかし、更新を実行している場合、そもそもなぜ中間変数を使用する必要があるのでしょうか? 同じテーブル内の 2 つの行を非常に簡単に結合できます...

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
于 2013-02-07T01:33:01.250 に答える