Я определил эту таблицу:
CREATE TABLE #stagingtable
(
id int identity(1,1),
typeflag int default 0,
resourcetype varchar(25),
resource varchar(40),
est int,
planned int,
actual int
)
And then I am looking for places where the resourcetype is not the same as the resourcetype in the previous row, so I wrote the following UPDATE:
UPDATE #stagingtable
SET typeflag = 1
WHERE id = (
SELECT min(id)
FROM #stagingtable
)
OR resourcetype <> (
SELECT resourcetype
FROM #stagingtable rt2
WHERE rt2.id = (
SELECT MAX(id)
FROM #stagingtable rt3
WHERE rt3.id < #stagingtable.id
)
)
Это сработало отлично. Однако среда, в которой я нахожусь, не позволяет мне использовать временные таблицы (RDL!). Поэтому я изменил свою таблицу на табличную переменную:
DECLARE @stagingtable TABLE
(
id int identity(1,1),
typeflag int default 0,
resourcetype varchar(25),
resource varchar(40),
est int,
planned int,
actual int
)
But the following code doesn't work.
UPDATE @stagingtable
SET typeflag = 1
WHERE id = (
SELECT min(id)
FROM @stagingtable
)
OR resourcetype <> (
SELECT resourcetype
FROM @stagingtable rt2
WHERE rt2.id = (
SELECT MAX(id)
FROM @stagingtable rt3
WHERE rt3.id < @stagingtable.id
)
)
Я получаю сообщение:
Сообщение 137, уровень 16, состояние 1, строка 431. Необходимо объявить скалярную переменную «@stagingtable».
Есть ли способ изменить оператор обновления, чтобы он работал?