CREATE PROCEDURE [dbo].[UDSPSelectMissing] -- paramters omitted AS BEGIN -- Code Omitted SELECT c.MemberID, c.FirstName, c.MiddleName, c.LastName, c.Suffix, c.PhoneHome, c.PhoneCell, c.Email FROM [dbo].[Members] c WHERE c.MemberID IN (SELECT MemberID FROM #PeopleCameMissing) ORDER BY c.LastName,c.FirstName END
当我将SP添加到“dbml”设计器的SP窗格时,我希望MSLinqToSqlGenerator创建“ISingleResult”作为返回值类型。令我惊讶的是,返回值类型是“int”。显然,生成器使用某些标准来确定返回值类型。我有其他类似的SP返回“ISingleResult”类型。
有人知道会导致生成器以这种方式运行的原因吗?
顺便说一下,这个站点上有人建议重新创建SP,从“dbml”中删除引用,重新启动Visual Studio(VS)并再次将其添加到“dbml”。我经历了这一切无济于事。
我的怀疑在于临时表“#PeopleCameMissing”。
欢迎提出任何意见或建议!
谢谢,
库伦
答案 0 :(得分:1)
DECLARE @PeopleCameMissing TABLE(
MemberID int,
FirstName nchar(20),
MiddleName nchar(20),
LastName nchar(20),
Suffix nchar(10),
PhoneHome nchar(20),
PhoneCell nchar(20),
Email nchar(80)
);
并将原声明改为:
INSERT INTO @PeopleCameMissing (
MemberID,
FirstName,
MiddleName,
LastName,
Suffix,
PhoneHome,
PhoneCell,
Email)
SELECT
c.MemberID,
c.FirstName,
c.MiddleName,
c.LastName,
c.Suffix,
c.PhoneHome,
c.PhoneCell,
c.Email
FROM [dbo].[Members] c
WHERE c.MemberID IN (SELECT a.MemberID FROM #PeopleCameMissing a)
ORDER BY c.LastName,c.FirstName;
DROP TABLE #PeopleCameMissing;
SELECT *
FROM @PeopleCameMissing
ORDER BY LastName,FirstName;
然后我再次将存储过程添加到“dbml”设计器中。这次生成器创建了所需的返回类型:“ISingleResult”。这似乎证明了我的推测。
答案 1 :(得分:0)
这很简单(在特殊条件下)。
SQL允许您在不调用过程的情况下询问结果集模式。
在不那么特殊的情况下*,SQL会在每次调用时为您提供备用答案。
*
有IF语句的人。这可能是故意的。我不太清楚SQL能够回答这个问题。