2012-10-11 40 views
2

我有兩個包含文檔內容的表格:一個用於臨時轉儲,另一個用於永久存儲。內容存儲爲類型圖像(因爲它是當前的功能,所以不能更改它)。SQL Server - 將映像傳遞給存儲過程,無效的本地var類型

我需要一個存儲過程,執行以下操作:

  1. 通行證屬於存在於臨時文件表TempDocumentID。
  2. 使用該TempDocumentID,從臨時文檔表中選擇圖像內容。
  3. 執行將圖像參數插入到永久文檔表中的現有存儲過程。

我的問題是雙重的:

  • 我不能聲明類型「形象」的局部變量從臨時表的SELECT語句來填補。它會拋出錯誤「文本,ntext和圖像數據類型對於局部變量無效」。
  • 我不知道一種方法來執行存儲過程直接結果從選擇語句的臨時表。

這是我的SQL小提琴例如:http://sqlfiddle.com/#!3/09384/5

感謝, 格雷格

回答

0

試試這個,它不會在SQL小提琴錯誤。我相信它會從子查詢結果傳遞:

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

    EXEC InsertDocumentContentFinal (SELECT TempContent 
    FROM DocumentContentTemp (NOLOCK) 
    WHERE TempDocumentID = @TempDocumentID) 
END 
+0

工作,但它不檢查實際存儲的過程。我編輯了小提琴,以包含procs和一個exec語句,該語句實際上應該做我需要做的事情。 http://sqlfiddle.com/#!3/a89ac/3 – pgarnoldjr

+0

Ahh darn,是的,我不認爲子查詢作爲一個參數將工作... RichardTheKiwi的答案可能會更好。抱歉。剛剛在黑暗中用這個答案=) –

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插入代碼直接進入您的包裝存儲過程。

+0

我們的客戶正在運行SQL Server 2000,所以這不起作用(儘可能多我喜歡它)。 – pgarnoldjr

+0

那麼你是不幸運的AFAIK – RichardTheKiwi

相關問題