0

我有一个时间序列加载到 SQL Server 中,我需要对其进行查询,然后允许多个任务从我的 SProc 中顺序读取结果。

根据我在 google 上的发现,似乎可以执行 SProc 或 LINQ 查询/语句。我目前不熟悉 LINQ(首选 SProc 方法)。一个比另一个有什么优势吗?

执行 SProc 后如何按顺序访问数据?我假设它 SProc 只会改变我的 ObjectContext。如果是这种情况,我是否需要每个任务来计算它所在的行,然后使用该计数器访问 ObjectContext 的每个参数以获得所需的值?

SProc 代码如下:

CREATE PROCEDURE [dbo].[DataRetrieval]
    @StartTime      Time(0)     ='00:00:00',
    @EndTime        Time(0)     ='00:00:00',
    @StartDate      Date        ='2012-01-01',
    @EndDate        Date        ='2012-01-01',
    @Location           nchar(6)    ='Scotland'
AS
/*
Author: Hans
Date: 09-01-2013
Purpose: Used to load a large section of data into memory.
*/
SET NOCOUNT ON;
BEGIN

SELECT *
FROM 
    dbo.Data
WHERE
    LOCATION = @Location
    AND ( Date = @StartDate  AND Time >= @StartTime
               OR Date > @StartDate )
    AND ( Date = @EndDate  AND Time < @EndTime
               OR Date < @EndDate )
ORDER BY
    DATE, TIME
END

为 USR 编辑 ...

            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "dbo.Data_GetStoredProcedureList";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.CommandTimeout = 10;
                cmd.Connection = connection;

                try
                {
                    connection.Open();

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader != null && reader.HasRows)
                        {
                            cancelTask.ThrowIfCancellationRequested();

                            while (reader.Read())
                            {
                                Entity rowData = new Entity();
                                rowData.RoutineName = reader["Routine_Name"].ToString();
                                rowData.ParameterName = reader["Parameter_Name"].ToString();
                                rowData.DataType = reader["Data_Type"].ToString();

                                sProcListRetrieval.Results.Add(rowData);
                            }
                        }
                    }
                }
4

1 回答 1

1

您可以轻松地在内存中缓冲几百万个对象。在 a 中缓冲 T-SQL 的结果List并将该列表传递给您的工作线程。

于 2013-01-09T15:15:27.577 回答