我有一个从临时表返回值的存储过程。在我的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
答案 0 :(得分:2)
如果您有一个返回同一列列的表,则可以指定存储过程以在数据模型图中返回该类型。 (通过将存储的prcoedure拖到它上面,或者通过在存储过程的属性中设置它来。)
或者,您可以使用这组列创建视图,并指定存储过程以返回该列。 (在存储过程的返回类型属性上。)
答案 1 :(得分:0)
不确定Visual Studio的旧版本,但我使用的是2010,我通过进入dbml设计器并添加了Class来解决了这个问题。
然后在新类中,添加存储过程将返回的临时表中的字段。即右键单击Class和Add - &gt;属性。
然后将存储过程的返回类型设置为新创建的类。
答案 2 :(得分:0)
我通过在包含临时表的存储过程的顶部添加SET FMTONLY OFF
来解决这个问题。 Visual Studio会立即自动生成类型。