为什么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
当我使用设计器导入此存储过程时,它将返回类型设置为“none”,即使SP清楚地返回一行或多行数据。
然而,如果我删除了第一个select语句,而只是返回原始表的内容......
CREATE PROCEDURE dbo.MartinTest
@parameter1 INTEGER
AS
SET NOCOUNT ON
SELECT C1, C2, C3
FROM MyTable
RETURN
......设计师工作正常并确定正确的返回类型。
BTW:我知道我可以手动编写对存储过程的调用,所以我不是在寻找解决方法,我更感兴趣的是这是否是Linq to SQL设计器中的错误或是否是别的。我正在使用VS2008 SP1。感谢。
答案 0 :(得分:4)
这在技术上不是Linq to SQL设计器的问题,这是SQL Server的一个问题。 Linq to SQL designer使用SET FMTONLY ON来获取存储过程的结果集信息。不幸的是,当存储过程有临时表时,此方法不起作用。
在ScottGu's blog post的前几条评论中,有一个小小的来回。
答案 1 :(得分:1)
您可以在存储过程的开头手动SET FMTONLY OFF
。可能会将其注释为正常使用,并且仅在生成LINQ类时取消注释。