我正在编写一个Silverlight客户端,它通过ASP.NET 2.0 Web服务与SQL数据库交互,我也在开发它。其中一个服务需要返回存储过程的结果,并且运行良好。但是,在执行存储过程之前,需要从不同的位置检索存储过程的一个参数,并且对数据库的这个附加请求会导致明显的减速(当我缓存检索到的值而不是每次调用时都会显而易见)。
不幸的是,缓存该值对我的情况无效,我宁愿将此值的检索和后续存储过程执行组合到单个查询中,以便服务器可以优化请求。但是,我的SQL并不强大,我不知道如何解决这个问题。
我们称之为tasktype
的值是通过一个密钥id
引用的。存储过程getrecords
采用包括tasktype
在内的一些参数,但可以假设在调用查询时其他参数值是已知的。存储过程返回记录表。
感谢您的帮助。
答案 0 :(得分: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
使用此功能。
答案 1 :(得分:0)
您应该能够创建一个UDF,它将获取tasktype的值并从您的数据检索sproc中调用它。
像
这样的东西CREATE FUNCTION dbo.TaskType()
Returns int
SELECT ... stuff that gets task type
END
然后从你的数据检索sproc调用
DECLARE tasktype int
SELECT tasktype = dbo.TaskType
或类似的......可能需要一些改造: - )