2010-08-09 2 views
0

У меня очень простой запрос, который вызывает UDF, который разбивает поле запятой. ЗапросНеправильный синтаксис около '.' - очень простой запрос

select top 10 * FROM Emails e WHERE EXISTS(SELECT TOP 1 1 FROM dbo.fn_Split(e.committees,',')) 

Когда я бегу/разобрать его, я получаю:

Msg 170, Level 15, State 1, Line 4 
Line 4: Incorrect syntax near '.'. 

Я думаю, что это должно быть что-то делать с SQL 2000. Если вы переключитесь из e.committees для чего-то HARDCODED (т.е. «A, B, C, D»), он отлично работает.

+0

Кроме того, я понимаю, что он всегда будет возвращать все 10 строк (пока данные электронной почты имеют данные). – Jonathan

+0

вы уверены в этой части: 'TOP 1 1 FROM'? – Andrey

+0

запрос ужасен, использование функции, которая разделяет строку, здесь является большой накладной. вы можете получить первое поле строки проще. плюс это против правил нормализации для хранения списка внутри отдельных ячеек. у вас гораздо более серьезные проблемы, чем синтаксические ошибки. – Andrey

ответ

0

SQL 2000 не поддерживает имена передаваемых столбцов в TVF. Это было внесено в SQL2005 вместе с CROSS APPLY

Я не совсем уверен, что вам нужно делать здесь. Является e.committees не 1NF список числовых комитетов ids? Если это так

select top 10 <column-list> 
FROM Emails e 
WHERE e.committees 
like '%[0-9]%' 
ORDER BY ... 

Может работать, но лучшим решением было бы хранить их в нормализованной форме в виде таблицы со столбцами email_id, committee_id или любой другой. Это, скорее всего, упростит ваши запросы!