【发布时间】:2014-10-09 04:37:09
【问题描述】:
不确定问题出在哪里...我编写了一个存储过程(在 SQL Server Mgmt.Studio 中执行时)返回我希望看到的结果:
USE [DataViewer]
GO
/****** Object: StoredProcedure [dbo].[DV_GetPSCTreeNodes] Script Date: 08/10/2014 1:48:03 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Me!>
-- Description: <Used by data viewer GUI.>
-- =============================================
ALTER PROCEDURE [dbo].[DV_GetPSCTreeNodes]
-- Add the parameters for the stored procedure here
@iNodeLevel int,
@iParentNodeId bigint
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sQuery varchar (2000)
IF @iNodeLevel >= 5
RETURN
ELSE
-- Insert statements for procedure here
SET @sQuery = 'SELECT * FROM DataView.dbo.v_Tree
WHERE L' + CAST((@iNodeLevel + 1) AS VARCHAR(10)) + 'ID IS NULL
AND L' + CAST((@iNodeLevel) AS VARCHAR(10)) + 'ID = ' + CAST((@iParentNodeId)
AS VARCHAR(10))
EXEC (@sQuery)
END
如前所述,如果我在 SMSS 中运行它,我会得到预期的结果。
但是,如果我通过我设置的服务运行它,我会得到正确数量的记录,但它们都是第一行的重复项(我可以查看表格并知道我得到了重复项) .如果我尝试新的参数并在 SSMS 中返回 15 个不同的行,我的网页将显示 15 行重复的第 1 行数据。
这是我的客户打来的电话:
List<v_PowerSystemCIMTree> list = null;
DVServiceClient proxy = new DVServiceClient();
try
{
list = proxy.DV_GetPSCTreeNodes(2,325550).ToList(); //2 and 325550 are just hardcoded to
//check to see if it's working
}
catch (Exception ex)
{
Console.WriteLine(ex.GetType().FullName);
Console.WriteLine(ex.Message);
}
finally
{
proxy.Close();
}
return View(list);
调用我的服务:
readonly DataViewerEntities _Context = new DataViewerEntities();
public List<DataViewer_DAL.v_PowerSystemCIMTree> DV_GetPSCTreeNodes(int firstParam,
long secondParam)
{
return _Context.DV_GetPSCTreeNodes(firstParam,secondParam).ToList();
}
为什么我会在 Management Studio 中得到一个结果集,但在我的网页上重复数据?
【问题讨论】:
-
已知问题:由于您从没有定义 主键 的 视图 中进行选择,实体框架将使用所有非可空列作为“实体键”。如果它从具有相同实体键的视图中读取第二行,它只会重复已经读取的第一行 - 它不会查看其他剩余的列....
标签: sql-server-2008 stored-procedures ssms