创建用于检索数据的存储过程

时间:2014-10-07 15:00:39

标签: sql-server stored-procedures

我是创建存储过程的新手,我需要知道这是否可行。查询将结果从开始日期返回到前一周(7天),并返回百分比的随机样本(在本例中为.4)。我有这个查询运行并获得所需的结果:

    select top .4 percent *
    from
    (
      SELECT DISTINCT T.date,T.job,C.creditType
      FROM [dbo].[Trip_Credits]  as T 

      INNER JOIN [dbo].[Credits] as C 
      ON  T.credit=C.code

      INNER JOIN [dbo].[Credit_Types] CT
      ON CT.Code = C.creditType
      AND C.creditType =2 
      where T.postdate >= DateADD(day, -7, getDate())
      )  pop order by newID()

我想知道的是,如果我可以创建一个存储过程,用户可以输入百分比值(其中.4是),数据(其中T.postdate是)和length(其中-7是)。请记住,表中唯一的一个是T.postdate。我看到一些例子如下:

    EXECUTE HumanResources.uspGetEmployeesTest2 @FirstName = N'Pilar', @LastName = N'Ackerman';

这就是我希望用户能够输入他们想要的值的地方。我知道我可以在C#中做到这一点,但我只是想知道这是否可以在sql server Management Studio中使用

1 个答案:

答案 0 :(得分:1)

是的,你可以。它看起来像这样:

   CREATE PROCEDURE dbo.your_sp_name
   (
      @percent DECIMAL (1,1),
      @date DATETIME,
      @DaysToLookBack INT
   )
   AS
   BEGIN
      select top(@percent) percent *
      from
      (
        SELECT DISTINCT T.date,T.job,C.creditType
        FROM [dbo].[Trip_Credits]  as T 

        INNER JOIN [dbo].[Credits] as C 
        ON  T.credit=C.code

        INNER JOIN [dbo].[Credit_Types] CT
        ON CT.Code = C.creditType
        AND C.creditType =2 
        where @date >= DateADD(day, @DaysToLookBack, getDate())
        )  pop order by newID()
   END