LINQ to SQL のストアド プロシージャで一時テーブルを使用しています。ストアド プロシージャを Linq to SQL dbml ファイルに追加すると、プロジェクトでエラー メッセージが発生する
「不明な戻り値の型 - 次のストアド プロシージャの戻り値の型を検出できませんでした。」</p>
ストアド プロシージャで一時テーブルを削除すると、戻り値は問題ありません。
Linq to SQL を使用してストアド プロシージャで一時テーブルを使用するにはどうすればよいですか
私はこのようにtemptableを置き換えます
CREATE TABLE tempTable(
PartsReceivingID INT,
SoPartID INT,
RecvQty INT,
ReturnQty INT
)
以下のように置き換えます
SELECT @RowCount = count(*)
FROM Parts.studentTempTable
IF @RowCount > 0
BEGIN
TRUNCATE TABLE Parts.studentTempTable;
END
作業バージョンのストアド プロシージャ
ALTER PROCEDURE [dbo].[stp_student_Select_New]
@pSchID as int,
@pCompanyID as int,
@pAgingDate as int,
@pTicketNo as VARCHAR(50),
@pInvoiceNo as VARCHAR(50),
@pDeliveryNo as VARCHAR(50),
@pPartNo as VARCHAR(50)
As
SET NOCOUNT ON
BEGIN
SELECT @RowCount = count(*)
FROM Parts.studentTempTable
IF @RowCount > 0
BEGIN
TRUNCATE TABLE Parts.studentTempTable;
END
===============================================
do something with studentTempTable
===============================================
SELECT
r.Ticketid AS TicketID,
r.SoPartNo AS PartNo ,
p.Description,
r.InvoiceNo as InvoiceNo,
r.InvoiceDate AS InvoiceDate,
DATEDIFF(DY,r.InvoiceDate,GETDATE())as Aging,
r.Qty AS CurrentInventory,
t.ReturnQty AS ReturnQty
FROM Parts.studentTempTable AS t,
Parts.PartsReceiving AS r,
Parts.PartsInfo as p
WHERE t.PartsReceivingID = r.PartsReceivingID
--and i.TicketID = r.TicketID
and p.PartID = r.SoPartID
and t.ReturnQty >0
and DATEDIFF(DY,r.InvoiceDate,GETDATE()) > @pAgingDate
and r.SchID = @pSchID
and r.CompanyID = @pCompanyID
and r.SoPartNo like '%%' + @pTicketNo + '%'
and r.InvoiceNo like '%%' + @pInvoiceNo + '%'
and r.SoPartNo like '%%' + @pPartNo + '%'
--and i.TicketNo like '%%' + @pTicketNo + '%'
--and r.DeliverNo like '%%' + @pDeliveryNo + '%'
Return
END
なし 作業バージョンのストアド プロシージャ
ALTER PROCEDURE [dbo].[stp_student_Select]
@pVendorID as int,
@pCompanyID as int,
@pAgingDate as int,
@pTicketNo as VARCHAR(50),
@pInvoiceNo as VARCHAR(50),
@pDeliveryNo as VARCHAR(50),
@pPartNo as VARCHAR(50)
As
SET NOCOUNT ON
BEGIN
BEGIN TRY
CREATE TABLE tempTable(
PartsReceivingID INT,
SoPartID INT,
RecvQty INT,
ReturnQty INT
)
===============================================
do something with tempTable
===============================================
SELECT
isnull(r.Ticketid,0) AS TicketID,
--i.TicketNo,
r.SoPartNo AS PartNo ,
p.Description,
r.InvoiceNo as InvoiceNo,
--r.DeliveryNo,
r.InvoiceDate AS InvoiceDate,
DATEDIFF(DY,r.InvoiceDate,GETDATE())as Aging,
r.Qty AS CurrentInventory,
t.ReturnQty AS ReturnQty
FROM tempTable AS t,
Parts.PartsReceiving AS r,
--Ticket.TicketInfo as i,
Parts.PartsInfo as p
WHERE t.PartsReceivingID = r.PartsReceivingID
--and i.TicketID = r.TicketID
and p.PartID = r.SoPartID
and t.ReturnQty >0
and DATEDIFF(DY,r.InvoiceDate,GETDATE()) > @pAgingDate
and r.VendorID = @pVendorID
and r.CompanyID = @pCompanyID
and r.SoPartNo like '%%' + @pTicketNo + '%'
and r.InvoiceNo like '%%' + @pInvoiceNo + '%'
and r.SoPartNo like '%%' + @pPartNo + '%'
--and i.TicketNo like '%%' + @pTicketNo + '%'
--and r.DeliverNo like '%%' + @pDeliveryNo + '%'
DROP TABLE temptable
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() as ErrorMessge,
ERROR_NUMBER() AS ErrorNumber
END CATCH
Return
END