SqlExpression 创建上 SQL 查询
SqlExpression Creating Upper SQL Query
我有以下代码:
SqlExpression<Postcodes> sqlExpression = db.From<Postcodes>()
.Where(x => x.CityId.StartsWith(searchString))
.OrderBy(x => x.CityId)
.ThenBy(x => x.ZipCode)
.Take(take);
当我查看调试时,我可以看到 sqlExpression.BodyExpression
有:
FROM "search"."Postcodes"
WHERE upper("CityId") like @0
即使我没有使用 x.CityId.ToUpper()
为什么它会生成 "upper"?
更新:
当我使用 "nort"
作为输入时,我可以在调试输出中看到:
2018-11-23 07:37:22,781 [21] DEBUG ServiceStack.OrmLite.OrmLiteReadCommandExtensions [(null)] - SQL: SELECT TOP 100 "ZipCode", "CityId", "StateId"
FROM "search"."Postcodes"
WHERE upper("CityId") like @0
ORDER BY "CityId", "ZipCode"
PARAMS: @0=NORT%
看起来默认情况下它使用不区分大小写的匹配。
为什么默认不区分大小写,我如何强制它进行区分大小写的匹配?
更新:
正如 Gabitu 指出的那样,它只是使列名大写并且不影响查询。将列名设为大写有什么意义?
我认为它正在对您的列名执行 Upper,因此它根本不会影响您的查询。
查询将类似于以下内容:
SELECT *
FROM "search"."Postcodes"
WHERE CITYID like @0
ORDER BY "CityId"
可能是因为您的列不区分大小写,所以将其设为大写。使用以下命令检查您的列是敏感的还是不敏感的:
SELECT COLUMN_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Postcodes' AND
CHARACTER_SET_NAME IS NOT NULL AND
TABLE_SCHEMA = 'search'
我有以下代码:
SqlExpression<Postcodes> sqlExpression = db.From<Postcodes>()
.Where(x => x.CityId.StartsWith(searchString))
.OrderBy(x => x.CityId)
.ThenBy(x => x.ZipCode)
.Take(take);
当我查看调试时,我可以看到 sqlExpression.BodyExpression
有:
FROM "search"."Postcodes"
WHERE upper("CityId") like @0
即使我没有使用 x.CityId.ToUpper()
为什么它会生成 "upper"?
更新:
当我使用 "nort"
作为输入时,我可以在调试输出中看到:
2018-11-23 07:37:22,781 [21] DEBUG ServiceStack.OrmLite.OrmLiteReadCommandExtensions [(null)] - SQL: SELECT TOP 100 "ZipCode", "CityId", "StateId"
FROM "search"."Postcodes"
WHERE upper("CityId") like @0
ORDER BY "CityId", "ZipCode"
PARAMS: @0=NORT%
看起来默认情况下它使用不区分大小写的匹配。
为什么默认不区分大小写,我如何强制它进行区分大小写的匹配?
更新: 正如 Gabitu 指出的那样,它只是使列名大写并且不影响查询。将列名设为大写有什么意义?
我认为它正在对您的列名执行 Upper,因此它根本不会影响您的查询。
查询将类似于以下内容:
SELECT *
FROM "search"."Postcodes"
WHERE CITYID like @0
ORDER BY "CityId"
可能是因为您的列不区分大小写,所以将其设为大写。使用以下命令检查您的列是敏感的还是不敏感的:
SELECT COLUMN_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Postcodes' AND
CHARACTER_SET_NAME IS NOT NULL AND
TABLE_SCHEMA = 'search'