使用LinqtoSql,如何从SPROC中的临时表返回值?

时间:2008-11-30 16:57:21

标签: linq-to-sql stored-procedures

我有一个从临时表返回值的存储过程。在我的DBML中,它为返回类型显示(None)。让它识别临时表中的列的技巧是什么?

CREATE PROCEDURE [dbo].[GetCategoryPriceRanges] 
@CategoryId int 
AS
BEGIN

DECLARE @MinPrice money, @MaxPrice money    
SELECT  @MinPrice = MIN(ourPrice),@MaxPrice = MAX(ourPrice)

DECLARE @loopCatch int

--catch infinite loops
SELECT @loopCatch = 1
WHILE @thisLow <= @maxPrice AND @loopCatch < 100
    BEGIN
        INSERT INTO #prices(lowRange, hiRange) VALUES (@thisLow, @thisHigh)
        SET @thisLow = @thisHigh + 1
        SET @thisHigh = 2 * @thisLow - 1
        SELECT @loopCatch = @loopCatch + 1
    END
SELECT * FROM #prices
DROP TABLE #prices
END

3 个答案:

答案 0 :(得分:2)

如果您有一个返回同一列列的表,则可以指定存储过程以在数据模型图中返回该类型。 (通过将存储的prcoedure拖到它上面,或者通过在存储过程的属性中设置它来。)

或者,您可以使用这组列创建视图,并指定存储过程以返回该列。 (在存储过程的返回类型属性上。)

答案 1 :(得分:0)

不确定Visual Studio的旧版本,但我使用的是2010,我通过进入dbml设计器并添加了Class来解决了这个问题。

然后在新类中,添加存储过程将返回的临时表中的字段。即右键单击Class和Add - &gt;属性。

然后将存储过程的返回类型设置为新创建的类。

答案 2 :(得分:0)

我通过在包含临时表的存储过程的顶部添加SET FMTONLY OFF来解决这个问题。 Visual Studio会立即自动生成类型。