2

我有两个包含文档内容的表:一个用于临时暂存,另一个用于永久存储。内容存储为类型图像(无法更改,因为它是当前功能)。

我需要一个执行以下操作的存储过程:

  1. 传入临时文档表中存在的 TempDocumentID。
  2. 使用该 TempDocumentID,从临时文档表中选择图像内容。
  3. 执行将图像参数插入永久文档表的现有存储过程。

我的问题有两个:

  • 我不能声明一个“图像”类型的局部变量来从临时表的选择语句中填充。它抛出错误“文本、ntext 和图像数据类型对局部变量无效。”
  • 我不知道用临时表的选择语句的直接结果来执行存储过程的方法。

这是我的 SQL Fiddle 示例:http ://sqlfiddle.com/#!3/09384/5

谢谢,格雷格

4

2 回答 2

0

您应该能够在 SQL Server 2005 及更高版本中使用 VARBINARY(MAX)。

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 回答
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 回答