Это способ сказать, что ваша база данных "Пожалуйста, не используйте курсор на меня". : D
Шучу, но со всей серьезностью вы найдете лучшую производительность в итерации табличной переменной, чем при использовании курсора.
DECLARE @timestamps TABLE(
TS DATETIME,
POINT_ID VARCHAR(100),
_VAL VARCHAR(100)
)
DECLARE @currTimeStamp DATETIME
INSERT INTO @timestamps
select timestamp as 'TS',REPLACE(REPLACE(POINT_ID,'[','_'),']','_') AS POINT_ID,_VAL
from TCF1_PULLCORD
where timestamp between '11/01/2011 6:30:00 AM' and '12/01/2011 6:29:59 AM'
group by point_id,timestamp,_val
WHILE (SELECT COUNT(TS) FROM @timestamps > 0)
BEGIN
SELECT @currTimeStamp = MIN(TS) FROM @timestamps
--Do work here
...
--Delete the timestamp we just worked on
DELETE FROM @timestamps WHERE TS = @currTimeStamp
END
Кроме того, если ваш SELECT не выполняет другие действия, которые мы здесь не видим, то в GROUP BY не требуется. Если вы не выполняете какие-либо агрегатные функции (например, SUM, MAX, MIN) и действительно просто пытаетесь получить уникальные комбинации, тогда SELECT DISTINCT - более эффективный способ добраться туда.
В этом случае ваш выбор будет:
select DISTINCT timestamp as 'TS',REPLACE(REPLACE(POINT_ID,'[','_'),']','_') AS POINT_ID,_VAL
from TCF1_PULLCORD
where timestamp between '11/01/2011 6:30:00 AM' and '12/01/2011 6:29:59 AM'