Its being BLOCKed, or possible there is a corruption in the database.
If you Stop/Start SQL Service and the query works then it was being blocked. You could also use sp_Who or SSMS to check for blocking if you are familiar with that?
To check for corruption:
USE MyDatbase
GO
DBCC CHECKDB WITH NO_INFOMSGS -- , ALL_ERRORMSGS
or use
DBCC CHECKDB WITH NO_INFOMSGS, EXTENDED_LOGICAL_CHECKS, DATA_PURITY -- , ALL_ERRORMSGS
if you have SQL 2008
You ought to check for corruption periodically (say, once a week) in any case, just so if it happens you know relatively soon after it happens, and not months-later when it will be much harder to correct / re-key corrupted / missing data.