Заявление PetaPoco SQL Union не работает в .NETC#

Место общения программистов C#
Ответить
Anonymous
 Заявление PetaPoco SQL Union не работает в .NET

Сообщение Anonymous »

Оператор SQL работает нормально в SSMS, но когда я применяю его в .NET Framework с помощью PetaPoco.SQL, он продолжает выдавать ошибку:

Все запросы, объединенные с помощью операторов UNION, INTERSECT или EXCEPT, должны иметь одинаковое количество выражений в целевых списках.

Проверено:
  • Типы данных каждого столбца являются правильными.
  • Количество столбцов в каждом операторе SELECT — 14.
  • Без UNION каждый оператор SELECT может запрашивать данные без ошибок.
Коды в .NET(Backend):
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»