2010-01-05 36 views
2

爲什麼Linq to SQL設計器不能理解以下存儲過程並正確導入它?Linq to SQL(設計器)不理解存儲過程

CREATE PROCEDURE dbo.MartinTest 
    @parameter1 INTEGER 

AS 
    SET NOCOUNT ON 

    SELECT C1, C2, C3 
    INTO #myTempTable 
    FROM MyTable 

    SELECT C1, C2, C3 
    FROM MyOtherTable INNER JOIN #myTempTable ON .... 

    RETURN 

當我使用設計導入此存儲過程,它設置返回類型爲「無」,即使SP顯然返回數據的一行或多行。

然而,如果刪除第一個SELECT語句,而是簡單地返回原始表的內容...

CREATE PROCEDURE dbo.MartinTest 
    @parameter1 INTEGER 

AS 
    SET NOCOUNT ON 

    SELECT C1, C2, C3 
    FROM MyTable 

    RETURN 

...設計師工作正常,並確定正確的返回類型。

順便說一句:我知道我可以手動編寫調用存儲過程,所以我不尋找解決方法,我更感興趣的是這是否是Linq to SQL的設計器中的錯誤,或者是否它是別的東西。我正在使用VS2008 SP1。

謝謝。

回答

3

這在技術上並不是Linq to SQL設計者的問題,這是SQL Server的一個問題。 Linq to SQL設計器使用SET FMTONLY ON獲取存儲過程的結果集信息。不幸的是,當存儲過程具有臨時表時,此方法不起作用。

ScottGu's blog post的前幾條評論中,對此有一個小的來回。

+0

不僅LINQ,但SSRS太神知道還有什麼! – gbn 2010-01-05 19:57:23

1

您可以在存儲過程開始時手動SET FMTONLY OFF。可能將其註釋掉以供正常使用,並且只在生成LINQ類時取消註釋。