巧用表值函数

来源:互联网 发布:重庆编程培训 编辑:程序博客网 时间:2024/06/11 19:47



数据很多,直接用查询比较慢且容易产生死锁,将查询结果插入到 存储过程中,又不方便在C#中写多项选择项,故用表植函数,可以全面兼顾到前面的不足。

1、写表值函数

Create FUNCTION [dbo].[GetXsddtd]
(
    @qsrq varchar(10),
    @jsrq varchar(10),
    @jzbz varchar(2),
    @lbbh varchar(12)
)
RETURNS @returntable TABLE
(
    订单编号 varchar(30),单据日期 varchar(10),业务日期 varchar(10),营销机构代码 varchar(20),营销机构名称 varchar(80),客户代码 varchar(20),客户名称 varchar(80),
    业务类型 varchar(20),订单种类 varchar(20),特批号 varchar(30),到货地址 varchar(250)
,备注 varchar(250),制单人 varchar(10),是否记账 varchar(2),记账时间 varchar(20),记账人 varchar(16),产品类别编号 varchar(30),
产品类别名称 varchar(100),物料编号 varchar(30),物料名称 varchar(100),规格型号 varchar(100),助记码 varchar(30),基本单位名称 varchar(10),订单数量 float
,整件 int,散件 int,含税单价 float,折扣比例 float,折前金额 float,折扣金额 float,折后含税金额 float,税率 float,不含税单价 float,不含税金额 float,税额 float,折后价 float
,折率 float,报价 float,下浮 float,米重 float,仓库 varchar(30),lqName varchar(15),业务员编号 varchar(20),业务员名称 varchar(80),部门编号 varchar(20),部门名称 varchar(80),核算仓库 varchar(30)
)
AS
BEGIN
    --while(convert(varchar,cast(@qsrq as datetime),112)<=convert(varchar,cast(@jsrq as datetime),112))
    begin
        insert into @returntable SELECT 订单编号,单据日期,业务日期,营销机构代码,营销机构名称,客户代码,客户名称,业务类型,订单种类,特批号,到货地址
,备注,制单人,是否记账,记账时间,记账人,产品类别编号,产品类别名称,物料编号,物料名称,规格型号,助记码,基本单位名称,订单数量
,整件,散件,含税单价,折扣比例,折前金额,折扣金额,折后含税金额,税率,不含税单价,不含税金额,税额,折后价
,折率,报价,下浮,米重,仓库,lqName,业务员编号,业务员名称,部门编号,部门名称,核算仓库
  FROM View_XsddtdQuery
  where convert(varchar,cast(业务日期 as datetime),112) between convert(varchar,cast(@qsrq as datetime),112) and convert(varchar,cast(@jsrq as datetime),112)
  and 是否记账 = @jzbz
  and left(产品类别编号,len(@lbbh)) = @lbbh
    end;   
    RETURN
END


2,表值函数普通调用 --select * from GetXsddtd('20170701','20170730','是','12')

3、在C#中用参数调用

        private void btnQuery_Click(object sender, EventArgs e)
        {
            if (dateEdit1.Text.Trim() == "" || dateEdit2.Text.Trim() == "" || cbxCplb.Text.Trim() == "")
            {
                MessageBox.Show(@"日期与产品类别必选,不能为空!");
            }
            else
            {
                //Query(@"select * from View_XsddtdQuery");       
                Query(@"select * from GetXsddtd(@qsrq,@jsrq,@jzbz,@lbbh) ");
            }
        }


    private void Query(string str)
        {
            string jzbz = radioGroup1.SelectedIndex == 0 ? "否" : "是";
            StringBuilder sql = new StringBuilder(str);
            List<string> wheres = new List<string>();
            List<SqlParameter> listParameter = new List<SqlParameter>();

  
            listParameter.Add(new SqlParameter("@qsrq", dateEdit1.Text.Trim()));

            listParameter.Add(new SqlParameter("@jsrq", dateEdit2.Text.Trim()));
   
            listParameter.Add(new SqlParameter("@jzbz", jzbz));
   
            listParameter.Add(new SqlParameter("@lbbh",  cbxCplb.EditValue.ToString()));

            if (cbxKh.Text.Trim().Length > 0)
            {
                wheres.Add(" 客户代码 = @khbh");
                listParameter.Add(new SqlParameter("@khbh", cbxKh.EditValue.ToString()));       
            }

            if (txtWlbh.Text.Trim().Length > 0)
            {
                wheres.Add(" 物料编号 = @wlbh");
                listParameter.Add(new SqlParameter("@wlbh", txtWlbh.Text.Trim()));
            }

            if ( cbxLq.Text.Trim().Length > 0)
            {
                wheres.Add(" lqName = @lqName");
                listParameter.Add(new SqlParameter("@lqName", cbxLq.Text.Trim()));
            }

            if (cbxFy.Text.Trim().Length > 0)
            {
                wheres.Add(" 是否核销 = @isFy");
                listParameter.Add(new SqlParameter("@isFy", cbxFy.Text.Trim()));
            }

            if (wheres.Count > 0)
            {
                string wh = string.Join(" and", wheres.ToArray());
                sql.Append(" where" + wh);   
            }

            gridControl1.DataSource = ProcSqlHelper.ExecuteDatatable(sql.ToString(), CommandType.Text, listParameter.ToArray());
            gridView1.ExpandAllGroups();
            gridView1.BestFitColumns();
        }




原创粉丝点击