画像列の値をある行から別の行にコピーする必要があります。そのために変数を使おうとしましたが、そのタイプの変数を宣言することすらできません。SQLServerは次のエラーメッセージを返しました。
メッセージ2739、レベル16、状態1、行1
text、ntext、およびimageデータ型はローカル変数に対して無効です。
画像列の値をある行から別の行にコピーする必要があります。そのために変数を使おうとしましたが、そのタイプの変数を宣言することすらできません。SQLServerは次のエラーメッセージを返しました。
メッセージ2739、レベル16、状態1、行1
text、ntext、およびimageデータ型はローカル変数に対して無効です。
データ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