代码之家  ›  专栏  ›  技术社区  ›  Jeff Yates

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

  •  1
  • Jeff Yates  · 技术社区  · 16 年前

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

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

    价值,我们称之为 tasktype ,通过单个键引用, id . 存储过程, getrecords ,采用一些参数,包括 任务类型 但可以假定在调用查询时其他参数值是已知的。存储过程返回记录表。

    谢谢你的帮助。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Marc Gravell    16 年前

    嗯,可能是这样的:

        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 .

        2
  •  0
  •   Michael Prewecki    16 年前

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

    类似的东西

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

    然后通过数据检索存储过程调用

    DECLARE tasktype int
    
    SELECT tasktype = dbo.TaskType
    

    或者类似的事情……可能需要一些修改:—)