Skip to content

SQLBuilder samples

SELECT TOP

c#
var dt = kit.select("t.ZH_TroubleOID as oid, t.T_Title, t.T_OrgName")
    .from("ZH_Trouble t")
    .where("t.T_Status= 1")
    .orderby("t.SYS_Created desc")
    .top(6)
    .query();

Paged SELECT

Pass ORDER BY into rowNumber so sorting applies inside the window.

TIP

Paged SQL uses ROW_NUMBER(); outer ORDER BY may differ from non-paged queries.

c#
var dt = kit.select("a.ZH_DangerAreaOID,a.SYS_Created")
    .from("ZH_DangerArea a")
    .where("(a.SYS_Deleted is null or a.SYS_Deleted=0)")
    .setPage(pageSize,pageNum)
    .rowNumber("DA_Idx","rowm")
    .orderby("rowm asc")
    .query();

GROUP BY

c#
var dt = kit.select("r.RS_Year,COUNT(*) as cc,SUM(r.RS_Agreementfunds) as funds,SUM(r.RS_Population) as popu,SUM(r.RS_Households) as house,SUM(r.RS_Numberofvillages) as village")
    .from("ZH_RelocatStatist r")
    .groupBy("r.RS_Year")
    .orderby("r.RS_Year desc")
    .top(10)
    .query();

UPDATE (single table)

c#
cc += kit.setTable("ZH_PortCell")
    .set("PC_X", cell["x"].ToString())
    .set("PC_Y", cell["y"].ToString())
    .set("PC_W", cell["w"].ToString())
    .set("PC_H", cell["h"].ToString())
    .where("ZH_PortCellOID", fk)
    .doUpdate();

UPDATE with joins

TIP

MySQL only allows UPDATE with INNER JOIN joins; SQL Server is more permissive.

c#
kit.set("C_Year", "2022")
.set("C_EndTime", DateTime.Now)
.set("C_TrainType", "p.Po_TrainType", false)
.set("C_Days", "p.Po_Day", false)
.set("C_PlanTotal", "(select SUM(d.Pa_PlanTotal) from PX_PostClassDe as d where PX_Class_FK=PX_ClassOID)")
.setTable("c")
.from("PX_Class as c left join PX_PostClass p on c.PX_PostClass_FK=p.PX_PostClassOID")
.where("c.PX_ClassOID in ('" + newDassOIDs + "')")
.doUpdate();

INSERT (single row)

c#
kit.setTable("HH_SysUser")
.set("Id",YitIdHelper.NextId())
.set("Account", row["USR_LOGIN"])
.set("Password", newpwd)
.set("Phone", row["MobilePhone"])
.set("Sex", 1)
.set("Status","1",false)
.set("AccountType","666")
.set("OrgId",0)
.set("OrderNo",100)
.set("IsDelete","0",false)

INSERT multi-row

TIP

Each newRow() starts a new row. Finish with doInsert(). For mixed insert/update use BatchSQL.

c#
kit.setTable("KB_DeptWorkor");
foreach (DataRow man in dt.Rows)
{
    kit.newRow()
        .set("KB_DeptWorkorOID", Guid.NewGuid())
        .set("HH_Org_FK", row.HH_Org_FK)
        .set("Dw_Task", "1")
        .set("Dw_Belong", "1", false)
        .set("SYS_LAST_UPD", DateTime.Now)
        .set("SYS_Deleted", "0", false);
}
var cc= kit.doInsert();

UNION

TIP

union() starts another SELECT branch.
unionAs wraps the union with aliases / UNION ALL.
selectUnioned sets the outer projection—needed when paging wraps the union in a CTE.

c#
var dt = kit.select("'Done' as statue,count(*) as co")
        .from("KB_Task")
        .where("KB_Statue", "2")
        .where("KB_Type", kanBanPara.type)
        .where("KB_StartDate", kanBanPara.StratDate, ">=")
        .where("KB_EndDate", kanBanPara.EndDate, "<=")
        .whereFormat(sqll)
        .union()
        .select(" 'In progress' as statue,count(*) as co")
        .from("KB_Task")
        .where("KB_Statue", "1")
        .where("KB_Type", kanBanPara.type)
        .where("KB_StartDate", kanBanPara.StratDate, ">=")
        .where("KB_EndDate", kanBanPara.EndDate, "<=")
        .whereFormat(sqll)
        .unionAs(wrapAsName:"a",isUnionAll:false,wrapSelect:true)
        .selectUnioned("a.statue,a.co")

MERGE

WARNING

Full MERGE is native on SQL Server and Oracle only.

c#
cc = kit.setTable("HH_SysRole")
    .from("UCML_RESPONSIBILITY as r")
    .mergeOn("HH_SysRole.Code=r.R_Code")
    .set("Name", "r.RESP_NAME", false)
    .set("Remark", "r.RESP_DESC_TEXT", false)
    .set("OrderNo", "r.[level]", false)
    .set("DataScope", "r.accessType", false)
    .setI("Code", "r.R_Code", false)
    .setI("TenantId", "1300000000001")
    .setI("IsDelete", "0", false)
    .doMergeInto();

Filtered source + alias:

c#
var cc = kit.setTable("ZH_Danger")
    .from("HH_MdmRisk as a")
    .whereInGuid("a.HH_MdmRiskOID",oids)
    .mergeAs("r")
    .mergeOn("ZH_Danger.ZH_SrcDanger_FK=r.HH_MdmRiskOID")
    .setU("D_Title", "r.MR_IssueName", false)
    .setU("D_Level", "(case when r.MR_Focused='1' then '3' else '1' end) ", false)
    .doMergeInto();

Recursive CTE

WARNING

withRecurTo switches the builder into recursive CTE mode until apply() returns to SQLBuilder.

c#
var dt = kit.withRecurTo("o")
    .select(commFields)
    .selectDeep("tDeepNum")
    .fromRoot("UCML_Organize")
    .joinOn("UCML_OrganizeOID", "ParentOID")
    .whereRoot((r,cur) =>
    {
        r.where(cur.RootAs+".UCML_OrganizeOID", rootID);
    })
    .whereNext((n,cur) =>
    {
        n.where(cur.CTEJoinAs+".tDeepNum<" + deep);
    })
    .apply()
    .select("*,(select COUNT(*) from UCML_Organize n where n.ParentOID=o.UCML_OrganizeOID) as childcc")
    .from("o")
    .where("o.UCML_OrganizeOID", rootID, "<>")
    .query();