Все запросы, объединенные с помощью операторов UNION, INTERSECT или EXCEPT, должны иметь одинаковое количество выражений в целевых списках.
Проверено:
- Типы данных каждого столбца являются правильными.
- Количество столбцов в каждом операторе SELECT — 14.
- Без UNION каждый оператор SELECT может запрашивать данные без ошибок.
Sql sql = Sql.Builder;
sql.Select("GC.CategoryName AS Category, GP.ProviderName, GN.en AS GameName, GA.HasBuyFreeSpin, GA.HasFeatureGames," +
"GA.HasJackpot, GA.EXclusive, GA.MEgaways, GA.Volatility, GA.RTP, GA.MInBet, GA.MAxBet," +
"GP.Id AS GameProviderId, GC.Id AS GameCategoryId");
sql.From("afbGameAttribute GA WITH(NOLOCK)");
sql.InnerJoin("dbo.afbGameProvider GP WITH(NOLOCK) ON GA.GameProviderId = GP.Id");
sql.InnerJoin("dbo.afbGameCategory GC WITH(NOLOCK) ON GP.GameCategoryId = GC.Id");
sql.InnerJoin("Language.dbo.GameName GN WITH(NOLOCK) ON GA.GameName = GN.key2");
if (param.f != null)
{
if (param.f.CategoryId > 0) { sql.Where("GC.Id = @0", param.f.CategoryId); }
if (param.f.ProviderId > 0) { sql.Where("GP.Id = @0", param.f.ProviderId); }
if (param.f.GameName != null) { sql.Where("GN.en LIKE @0", "%" + param.f.GameName + "%"); }
}
sql.Append(" UNION ");
sql.Select("GC.CategoryName AS Category, GP.ProviderName, GN.en AS GameName, " +
"CAST(NULL AS TINYINT) AS HasBuyFreeSpin, CAST(NULL AS TINYINT) AS HasFeatureGames, CAST(NULL AS TINYINT) AS HasJackpot, CAST(NULL AS TINYINT) AS EXclusive, CAST(NULL AS TINYINT) AS MEgaways, CAST(NULL AS NVARCHAR(20)) AS Volatility, CAST(NULL AS DECIMAL) AS RTP, CAST(NULL AS DECIMAL(12,4)) AS MInBet, CAST(NULL AS DECIMAL(12,4)) AS MAxBet," +
"GP.Id AS GameProviderId, GC.Id AS GameCategoryId");
sql.From("afbGame G WITH(NOLOCK)");
sql.InnerJoin("dbo.afbGameProvider GP WITH(NOLOCK) ON G.GameProviderId = GP.Id");
sql.InnerJoin("dbo.afbGameCategory GC WITH(NOLOCK) ON G.GameCategoryId = GC.Id");
sql.InnerJoin("Language.dbo.GameName GN WITH(NOLOCK) ON G.GameName = GN.key2");
sql.Where("NOT EXISTS (SELECT 1 FROM afbGameAttribute GA WITH(NOLOCK) WHERE GA.GameName = G.GameName)");
if (param.f != null)
{
if (param.f.CategoryId > 0) { sql.Where("GC.Id = @0", param.f.CategoryId); }
if (param.f.ProviderId > 0) { sql.Where("GP.Id = @0", param.f.ProviderId); }
if (param.f.GameName != null) { sql.Where("GN.en LIKE @0", "%" + param.f.GameName + "%"); }
}
sql.OrderBy("GameName");
result.D = db.Page(param.p, param.n, sql);
Подробнее здесь: https://stackoverflow.com/questions/792 ... ing-in-net