我正在从sproc检索linq的数据并得到一个异常“子查询返回的值超过1,当子查询跟在=时,这是不允许的! =,<,< =,>,> =或者当子查询用作表达式时。“。奇怪的是,它从SQL Server Management Studio运行正常。 该存储过程是这样的:LINQ到SQL返回“子查询返回多个值”,但它不应该
BEGIN
DECLARE @LoginRights Table(RowNo int, TabID int, MenuID int, ControlID int)
INSERT INTO @LoginRights SELECT row_number() Over (order by ControlID), TabID, MenuID, ControlID FROM dbo.func_Action_LoginRoles(@LoginID) --WHERE [email protected] AND ControlID is not null
DECLARE @RightsCount [email protected]@RowCount, @iRow int =1,@ControlID int,@MenuID int;
DECLARE @Menu Table(MenuID int)
INSERT INTO @Menu(MenuID)
SELECT MenuID FROM (
SELECT m.ID MenuID, t.ID TabID FROM dbo.tblAction_Menu m JOIN dbo.tblAction_MenuGroup mg on m.GroupID=mg.ID JOIN tblAction_Tabs t on t.ID=mg.TabID
WHERE t.ID IN(SELECT TabID FROM @LoginRights WHERE MenuID is null) or
m.ID IN(SELECT MenuID FROM @LoginRights WHERE MenuID is not null)
) m Group by m.MenuID
DECLARE @ControlsInMenu Table(MenuID int, ControlID int)
WHILE @iRow<[email protected] BEGIN
SELECT @ControlID=ControlID, @MenuID=MenuID FROM @LoginRights WHERE [email protected]
IF @MenuID is null BEGIN
INSERT INTO @ControlsInMenu(MenuID, ControlID)
SELECT MenuID, @ControlID FROM @Menu
END ELSE BEGIN
INSERT INTO @ControlsInMenu(MenuID, ControlID)
SELECT @MenuID, @ControlID
END
SET @[email protected]+1 END
SELECT MenuID, ControlID FROM @ControlsInMenu
END
The function: ALTER FUNCTION [dbo].[func_Action_LoginRoles] (@LoginID int) RETURNS @LoginsRoles TABLE(ID int, Name nvarchar(50), TabID int, MenuID int, ControlID int) AS BEGIN INSERT INTO @LoginsRoles (ID, Name, TabID, MenuID, ControlID) SELECT lr.ID, lr.Name, TabID, MenuID, ControlID FROM tblLogins_Roles lr JOIN tblLogins_RolesInGroup rig ON lr.ID=rig.RolesID JOIN tblLogins_Roles_Groups lrg ON lrg.ID=rig.Roles_GroupID JOIN tblLogins l ON l.Roles_GroupID=lrg.ID WHERE [email protected] RETURN END
数据检索方法是这样的(C#/ LINQ到SQL):
var ControlsInMenu = from c in dc.proc_Action_ControlsInMenu(LoginData.LoginID, TabID)
select new
{
c.MenuID,
c.ControlID
};
定义“运行OK SQL服务器管理工作室”。它在SSMS中精确返回1行? – 2010-11-08 07:08:12
我甚至不能*看到下面的子查询=,!=等 - 你确定问题不在'func_Action_LoginRoles'中吗? – 2010-11-08 07:26:13
请您发布'func_Action_LoginRoles' - 否则我会得出结论,没有足够的信息来回答这个问题... – 2010-11-08 07:34:23