SELECT SysRoleId 
FROM SysUserInRole 
WHERE SysUserId = '7F3B869F-34F3-4F20-AB4D-7480A5FDF647'
UNION SELECT '7F3B869F-34F3-4F20-AB4D-7480A5FDF647'

Как реализовать это в Terrasoft.Core.DB.Select ??

Нравится

1 комментарий
Лучший ответ

Евгений, в Select можно использовать Union, в который передавать другой Select.

Пример такого использования есть в функции DeactivateProcessEntryPoint схемы ProcessUserTaskUtilities:

var processListenersSelect =
	new Select(userConnection)
		.Column("Id")
	.From("SysEntityCommonPrcEl")
	.Where("RecordId").IsEqual(entityIdParameter)
	.And("RecordChangeType").IsEqual(Column.Parameter(EntityChangeType.Updated));
var select =
	new Select(userConnection)
		.Column("Id")
	.From("EntryPoint")
	.Where("EntityId").IsEqual(entityIdParameter)
	.And("IsActive").IsEqual(Column.Parameter(true))
	.Union(processListenersSelect);

А получить во втором колонку-константу можно при помощи:

Column.Parameter(new Guid("7F3B869F-34F3-4F20-AB4D-7480A5FDF647"))

 

Евгений, в Select можно использовать Union, в который передавать другой Select.

Пример такого использования есть в функции DeactivateProcessEntryPoint схемы ProcessUserTaskUtilities:

var processListenersSelect =
	new Select(userConnection)
		.Column("Id")
	.From("SysEntityCommonPrcEl")
	.Where("RecordId").IsEqual(entityIdParameter)
	.And("RecordChangeType").IsEqual(Column.Parameter(EntityChangeType.Updated));
var select =
	new Select(userConnection)
		.Column("Id")
	.From("EntryPoint")
	.Where("EntityId").IsEqual(entityIdParameter)
	.And("IsActive").IsEqual(Column.Parameter(true))
	.Union(processListenersSelect);

А получить во втором колонку-константу можно при помощи:

Column.Parameter(new Guid("7F3B869F-34F3-4F20-AB4D-7480A5FDF647"))

 

Показать все комментарии

Если при работе с Terrasoft 3.x при попытке открыть датасет возникает такая ошибка, дело, скорее всего, в select query, использующем UNION. К примеру, такой запрос есть в основном реестре раздела проектов (sq_Project) и в механизме напоминаний (sq_Remindings).

Причина проблемы - разное количество полей в двух ветках UNION ALL. Также, вполне может быть, у полей с одинаковым названием в одной ветви стоит галочка "всегда выбирать в запросе", а в другой - по ошибке снята или просто не указана при создании механизма напоминаний для самодельных разделов. Для исправления ошибки нужно привести поля к одинаковому виду.

union

Проще говоря, код

SELECT 'a', 'b' UNION SELECT 'c', 'd'

работает, а
SELECT 'a', 'b' UNION SELECT 'c'

вызывает ошибку.

MS SQL ругается так: All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists
А Oracle: ORA-01789: query block has incorrect number of result columns

Не дайте им для этих слов ни единого повода!

Нравится

Поделиться

0 комментариев
Показать все комментарии