使用limit 和 FindAndCount的一个bug - sql server #1698

Closed
opened 2020-05-29 06:52:56 +00:00 by 344085057 · 3 comments

code:

func GetBcdyByObj(
	t *Bcdy, //请求的条件
	dataOrder *DataOrder, //排序
	paging *Paging, //分页

) ([]*Bcdy, int64, error) {

	engine := utils.GetEngine()

	var roles []*Bcdy

	session := engine.Where("company_id = ?", t.CompanyId)

	if t.Id != 0 {
		session = session.And("id = ?", t.Id)
	}

	if t.Bcmc != "" {
		session = session.And("bcmc like CONCAT('%',?,'%')", t.Bcmc)
	}

	if dataOrder.SortField != "" && dataOrder.Order != "" {
		session = session.OrderBy(dataOrder.SortField + " " + dataOrder.Order)
	}

	count, err := session.Limit(paging.PageSize, (paging.Current-1)*paging.PageSize).FindAndCount(&roles)
	if err != nil {
		fmt.Println(err.Error(), "-----")
	}

	return roles, count, err
}

sql 日志:

[SQL] SELECT TOP 10 ... FROM [bcdy] WHERE (company_id = ?) AND (id NOT IN (SELECT TOP 1 id FROM [bcdy] WHERE (company_id = ?))) [33 33]

[SQL] SELECT TOP 10 count(*) FROM [bcdy] WHERE (company_id = ?) AND (id NOT IN (SELECT TOP 1 id FROM [bcdy] WHERE (company_id = ?))) [33]
这条count语句出现了2个占位符 后面却只带了一个参数
sql: expected 2 arguments, got 1

code: ```golang func GetBcdyByObj( t *Bcdy, //请求的条件 dataOrder *DataOrder, //排序 paging *Paging, //分页 ) ([]*Bcdy, int64, error) { engine := utils.GetEngine() var roles []*Bcdy session := engine.Where("company_id = ?", t.CompanyId) if t.Id != 0 { session = session.And("id = ?", t.Id) } if t.Bcmc != "" { session = session.And("bcmc like CONCAT('%',?,'%')", t.Bcmc) } if dataOrder.SortField != "" && dataOrder.Order != "" { session = session.OrderBy(dataOrder.SortField + " " + dataOrder.Order) } count, err := session.Limit(paging.PageSize, (paging.Current-1)*paging.PageSize).FindAndCount(&roles) if err != nil { fmt.Println(err.Error(), "-----") } return roles, count, err } ``` ----- sql 日志: > [SQL] SELECT TOP 10 ... FROM [bcdy] WHERE (company_id = ?) AND (id NOT IN (SELECT TOP 1 id FROM [bcdy] WHERE (company_id = ?))) **[33 33]** > [SQL] SELECT TOP 10 count(*) FROM [bcdy] WHERE (company_id = ?) AND (id NOT IN (SELECT TOP 1 id FROM [bcdy] WHERE (company_id = ?))) **[33]** 这条count语句出现了2个占位符 后面却只带了一个参数 sql: expected 2 arguments, got 1
Owner

Which xorm version?

Which xorm version?
lunny added the
kind
bug
label 2020-05-29 13:56:43 +00:00
Author

Which xorm version?

v1.0.1

> Which xorm version? v1.0.1
lunny added the
db
sqlserver
label 2020-06-04 01:28:02 +00:00
Owner

fixed by #1651

fixed by #1651
lunny closed this issue 2020-06-13 05:32:39 +00:00
lunny added this to the 1.0.2 milestone 2020-06-13 05:32:46 +00:00
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xorm/xorm#1698
No description provided.