2013-03-24 3 views
1

Можно ли определить пользовательский предикат в T-SQL? Так что, например, я могу написать:Создать пользовательскую функцию предиката в T-SQL?

SELECT a,b,c 
FROM MyTable 
WHERE dbo.myCustomPredicate(a) 

простой обходной путь заключается в создании скалярная функция, которая возвращает dbo.myCustomPredicate БИТ, и изменить ИНЕКЕ

WHERE dbo.myCustomPredicate(a)=1 

Просто интересно, если можно избежать «= 1».

+1

Нет; в SQL нет типа данных Boolean. –

+0

@PieterGeerkens - SQL: 1999 имеет булевский тип данных. –

+0

@MartinSmith: Исправление: T-SQL не имеет типа Boolean. –

ответ

3

Нет, это невозможно.

SQL Server не поддерживает логический тип данных ANSI SQL.

Вы не говорите, что реализация dbo.myCustomPredicate, но вполне вероятно, следует избегать также WHERE dbo.myCustomPredicate(a)=1 на основании как конкурентоспособности, так и общей производительности скалярных UDF в SQL Server.

+0

Действительно. UDF в предложении where будут стремиться к сканированию таблицы ... Очень плохое значение с точки зрения производительности. –

+0

Хорошая обратная связь, спасибо! – Max

Смежные вопросы