【问题标题】:how to filter a date in views using a variable?如何使用变量过滤视图中的日期?
【发布时间】:2016-01-03 09:01:29
【问题描述】:

这里的查询很好..

 SELECT M.id, 
       M.accnt, 
       amount = M.amount + Isnull(s.supply, 0), 
       issued = Isnull(I.issued, 0) 
FROM   maintbl M 
       LEFT OUTER JOIN (SELECT id, 
                               Sum(supply) AS supply 
                        FROM   supplytbl 
                        WHERE  Month(dates) = 1  -- Month filter for Jan - feb Month(dates) in (1,2)
                        GROUP  BY id) S 
                    ON s.id = M.id 
       LEFT OUTER JOIN (SELECT id, 
                               Sum(issued) AS issued 
                        FROM   issuedtbl 
                        WHERE  Month(dateissue) = 1 -- Month filter
                        GROUP  BY id) I 
                    ON I.id = M.id 

但是如何在视图中执行此操作?...使用变量过滤日期?喜欢

WHERE  Month(dateissue) = textbox1.text

或者有没有办法在视图中进行这样的查询?很高兴有任何帮助.. :)

【问题讨论】:

    标签: sql views


    【解决方案1】:

    如果您使用的是 SQL Server,则无法将参数传递给视图

    所以,你需要像这样创建存储过程

    CREATE PROCEDURE testSP
    (
        @issue_month INT
    ) 
    AS 
    BEGIN
       ...
    END
    

    【讨论】:

      【解决方案2】:
      CREATE PROCEDURE monthsearch
      @date datetime2
      AS
      BEGIN
      SELECT * FROM <queryname> WHERE <field date>=@date    
      END;
      

      调用它: 执行月份搜索日期时间

      【讨论】:

        【解决方案3】:

        存储过程是回答您问题的最佳方式。

        这是代码

        CREATE PROCEDURE usp_sample @Month_date_issue int
        AS
        SELECT M.id, 
               M.accnt, 
               amount = M.amount + Isnull(s.supply, 0), 
               issued = Isnull(I.issued, 0) 
        FROM   maintbl M 
               LEFT OUTER JOIN (SELECT id, 
                                       Sum(supply) AS supply 
                                FROM   supplytbl 
                                WHERE  Month(dates) = 1  -- Month filter for Jan - feb Month(dates) in (1,2)
                                GROUP  BY id) S 
                            ON s.id = M.id 
               LEFT OUTER JOIN (SELECT id, 
                                       Sum(issued) AS issued 
                                FROM   issuedtbl 
                                WHERE  Month(dateissue) = @Month_date_issue -- Month filter
                                GROUP  BY id) I 
                            ON I.id = M.id 
        GO
        

        这里要调用存储过程

        using (SqlCommand cmd = new SqlCommand("usp_sample", con)) {
              cmd.CommandType = CommandType.StoredProcedure;
        
              cmd.Parameters.Add("@Month_date_issue ", SqlDbType.Int32).Value = Int32.Parse(textbox1.text);
        
              con.Open();
              cmd.ExecuteNonQuery();
            }
        

        【讨论】:

        • aah..所以我只需要在一夜之间学习这个存储过程..aaahh..hmmm..btw..tnx mate :)
        • 相信你很快就会习惯存储过程。别客气 :)。有关如何使用参数调用存储过程,请参阅我编辑的帖子
        • 我会尝试一下,伙计..tnx :) 新年快乐! :)
        • hmmm..我们可以将存储过程用于水晶报表吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-29
        • 1970-01-01
        • 2017-10-07
        • 2019-12-29
        相关资源
        最近更新 更多