1

我正在编写一个 Silverlight 客户端,它通过我也在开发的 ASP.NET 2.0 Web 服务与 SQL 数据库进行交互。其中一项服务需要返回存储过程的结果,并且运行良好。但是,在执行存储过程之前,需要从不同的位置检索存储过程的一个参数,并且这个对数据库的额外请求会导致明显的减速(当我缓存检索到的值而不是每次调用都获取它时很明显)。

不幸的是,缓存该值对我的情况无效,我宁愿将该值的检索和随后的存储过程执行组合到一个查询中,以便服务器可以优化请求。但是,我的 SQL 并不强大,而且我一点也不知道该怎么做。

这个值,我们称之为tasktype,是通过一个键引用的,id。存储过程getrecords接受一些参数,包括tasktype,但可以假设其他参数值在调用查询时是已知的。存储过程返回一个记录表。

谢谢你的帮助。

4

2 回答 2

3

好吧,它可能是这样的:

    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("@id", ...); // your id arg
    cmd.Parameters.AddWithValue(... , ...); // your other args...
    cmd.CommandText = @"
DECLARE @TaskType int -- or whatever

SELECT @TaskType = // some existing query based on @id

EXEC getrecords @TaskType, ...
";

但是,您可能必须澄清如何获得任务类型。

您应该可以将其用作IDataReader,或使用DataTable.Load

于 2009-01-19T14:21:42.673 回答
0

您应该能够创建一个 UDF,它将获取 tasktype 的值并从您的数据检索存储过程中调用它。

就像是

CREATE FUNCTION dbo.TaskType()
Returns int
   SELECT ... stuff that gets task type
END

然后从您的数据检索存储过程调用

DECLARE tasktype int

SELECT tasktype = dbo.TaskType

或类似的东西......可能需要一些返工:-)

于 2009-01-19T14:29:31.347 回答