2010-08-09 49 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(即'A,B,C,D'),它工作正常。

+0

此外,我知道它會一直返回所有10行(只要Emails有數據)。 – Jonathan 2010-08-09 22:17:00

+0

你確定那部分:'TOP 1 1 FROM'? – Andrey 2010-08-09 22:19:55

+0

查詢很糟糕,使用分割字符串的函數在這裏是很大的開銷。你可以更容易地獲得字符串的第一個字段。此外,這是針對在單個單元格內存儲列表的規範化規則。你有更嚴重的問題,然後語法錯誤。 – Andrey 2010-08-09 22:21:33

回答

0

SQL 2000不支持將列名傳遞給TVF。這是在SQL2005帶來的CROSS APPLY

我不太確定你在這裏需要做什麼。 e.committees是數字委員會ID的非1NF列表嗎?如果是這樣

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

可能會奏效,但更好的解決辦法是把這些在一個規範化的形式在表中的列email_idcommittee_id或任何存儲。這可能會使您的查詢更容易!