ADO 2.5 を使用して SQL Server 2008 データベースと通信する VB6 で記述されたレガシー アプリがあります。その中には、ストアド プロシージャからデータを取得するレポートがあります。varchar
ストアド プロシージャは、結果セットの 1 つの列として結果を返す UDF を呼び出します。SQL Server Management Studio から呼び出されると、その列が正しく設定されますが、VB6 アプリケーション内から呼び出されると、空の値が返されます。これを引き起こしている可能性のある互換性の問題はありますか?
UDF は次のとおりです。
ALTER FUNCTION dbo.TransferNoteAgreementSummary(@ClientID int, @Year int)
RETURNS varchar(3000) AS
BEGIN
DECLARE @ret varchar(3000)
SET @ret=''
SELECT @ret = @ret +
+ CONVERT(varchar, F.NumBins) + ' of ' + B.[Name]+', '+CONVERT(varchar, F.DaysPerWeek)+' lifts, ' + CF.Frequency
+ ' from ' + CONVERT(varchar, F.StartDate,106)+' to '+CONVERT(varchar, F.EndDate, 106) + dbo.CrLf()
FROM Accounts A
JOIN AccountFragments F ON A.AccountID=F.AccountID
JOIN BinTypes B ON A.BinTypeID=B.BinTypeID
JOIN ContractFrequencies CF ON F.FrequencyID=CF.FrequencyID
WHERE A.ClientID=@ClientID AND A.ContractYear=@Year
ORDER BY B.[Name], A.AccountID, F.StartDate
RETURN @ret
END
ストアド プロシージャの関連部分は次のとおりです。
ALTER PROC [dbo].[sp_PrintRoundsReport]
AS
DECLARE @Year int
DECLARE @Results TABLE([Route] VARCHAR(100), Town VARCHAR(200), ClientID INT, Customer VARCHAR(400), [Address] VARCHAR(MAX),
[Item Code] VARCHAR(50), Bins INT, [Type] VARCHAR(40), Volume INT, BinDesc VARCHAR(3000),
CollectDay VARCHAR(20), DayOrder int)
[ irrelevant lines removed ]
SELECT [Route], Town, Customer, [Address], [Item Code], Bins, [Type], Volume,
dbo.TransferNoteAgreementSummary(ClientID, @Year) AS BinDesc, CollectDay
FROM @Results
ORDER BY DayOrder, [Route], Town, [Address], Volume
最後に、呼び出されるコードは次のとおりです。
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = GetConnectionString()
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "sp_PrintRoundsReport"
Dim rs As New Recordset
Call rs.Open(cmd)
機能に問題があるようです。定数文字列を返すように変更すると、値が正しく渡されます
これは誰にとっても何か鐘を鳴らしますか?