如何在一个SQL查询中检索值并在存储过程中使用它?

时间:2009-01-19 14:13:49

标签: c# sql sql-server asp.net-2.0

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

不幸的是,缓存该值对我的情况无效,我宁愿将此值的检索和后续存储过程执行组合到单个查询中,以便服务器可以优化请求。但是,我的SQL并不强大,我不知道如何解决这个问题。

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

感谢您的帮助。

2 个答案:

答案 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, ...
";

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

您应该可以IDataReaderDataTable.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

或类似的......可能需要一些改造: - )