我甚至不確定我是否可以充分描述這一點,但從此開始:我有一個存儲過程,可以處理獲取大量數據,並且同時設置它做到以下幾點:存儲過程結果集與返回值
- 獲得最高批號爲變量
- 更新所有未處理的記錄,與該批次#
- 選擇所有這些記錄
- 將其標記爲處理
(代碼將在下面顯示)
該存儲過程由GoAnywhere(一種數據傳輸工具)執行。 GoAnywhere正在執行查詢,甚至表明它正在檢索正確的記錄集,但在應該使用select語句的結果集來更新目標數據庫的時候正在轟炸。它得到的錯誤是它不能將整數轉換成行集。
我發現,在SQL Server中,除了結果集外,存儲過程總是返回1或0作爲返回值。出於某種原因,GoAnywhere似乎正在挑選它,而不是SQL語句的結果。
我已經確定,如果我在下面的代碼示例中註釋掉註釋掉的代碼行,GoAnywhere會提取結果集並很好地處理它。
我的問題:有沒有辦法修改這個存儲過程,以便默認返回值將是結果集而不是1或0,短缺將其分解爲多個存儲過程調用?
另一個問題:如果我真的很幸運,並且有GoAnywhere專家查看此內容,我將同樣高興地告訴您如何讓GoAnywhere忽略返回值並接受結果集。
存儲過程的代碼:
USE [myDB]
GO
/****** Object: StoredProcedure [dbo].[myProcedure] Script Date: 10/31/2014 13:42:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE myProcedure
AS
DECLARE @BatchId int;
DECLARE @BatchDate datetime;
SET @BatchId = (select IsNull(Max(ProcessBatchID), 0) + 1 FROM myTable)
set @BatchDate = GetDate();
-- UPDATE myTable SET ProcessBatchID = @BatchId, ProcessedDateTime = @BatchDate, ProcessingStatus = 'Processing' WHERE ProcessBatchID IS NULL;
SELECT
FullCardNumber, CustomerMarsNumber, CustomerLevelId,
CustomerLevelName, ProcessBatchID
FROM
myTable
WHERE
ProcessBatchID = @BatchId;
-- UPDATE myTable SET ProcessingStatus = 'Processed' WHERE ProcessBatchID = @BatchId;
'SET NOCOUNT ON;'在程序的頂部。 – 2014-10-31 21:44:05
@Cory - 謝謝!我希望你作爲答案發布,以便我可以投票並接受它,因爲你是第一個發佈正確的解決方案。但是謝謝你的幫助! – David 2014-10-31 21:59:04