2

ドキュメント コンテンツを含む 2 つのテーブルがあります。1 つは一時的なステージング用、もう 1 つは永続的なストレージ用です。コンテンツはタイプ イメージとして保存されます (現在の機能であるため、これを変更することはできません)。

次のことを行うストアド プロシージャが必要です。

  1. 一時ドキュメント テーブルに存在する TempDocumentID を渡します。
  2. その TempDocumentID を使用して、一時ドキュメント テーブルから画像コンテンツを選択します。
  3. イメージ パラメータを使用して永続的なドキュメント テーブルに挿入する既存のストアド プロシージャを実行します。

私の問題は2つあります。

  • 'image' 型のローカル変数を宣言して、一時テーブルの select ステートメントから入力することはできません。「テキスト、ntext、およびイメージのデータ型は、ローカル変数に対して無効です」というエラーがスローされます。
  • 一時テーブルの選択ステートメントからの直接の結果でストアド プロシージャを実行する方法がわかりません。

これが私のSQL Fiddleの例です: http://sqlfiddle.com/#!3/09384/5

ありがとう、グレッグ

4

2 に答える 2

0

これを試してみてください。SQL Fiddle でエラーが発生しません。サブクエリの結果が渡されると思います:

CREATE PROCEDURE MoveDocumentFromTemp
(
  @TempDocumentID numeric(18,0)
)
AS
BEGIN

  EXEC InsertDocumentContentFinal (SELECT TempContent
  FROM DocumentContentTemp (NOLOCK)
  WHERE TempDocumentID = @TempDocumentID)
END
于 2012-10-11T19:02:50.420 に答える
0

VARBINARY(MAX) は、SQL Server 2005 以降で使用できるはずです。

CREATE PROCEDURE MoveDocumentFromTemp
(
  @TempDocumentID numeric(18,0)
)
AS
BEGIN
  DECLARE @ContentToMove varbinary(max)
  SELECT @ContentToMove = cast(TempContent as varbinary(max))
  FROM DocumentContentTemp (NOLOCK)
  WHERE TempDocumentID = @TempDocumentID

  EXEC InsertDocumentContentFinal @ContentToMove
END
GO

SQL Server 2000 の場合は、MoveDocumentFromTemp の INSERT コードをラッパー ストアド プロシージャに直接含めるだけで済みます。

于 2012-10-11T19:06:06.157 に答える