Попытка добавить столбец во временную таблицу не удалась - PullRequest
3 голосов
/ 30 ноября 2009

Этим утром я несколько раз просматривал это и не могу найти проблему. Это, наверное, очень просто, и я чувствую себя идиотом, когда кто-то указывает на это. Что бы этот SQL потерпел неудачу?

-- Get CurrentRowCount
DECLARE @MaxID INT

SELECT @MaxID = ISNULL(MAX(WorkTypeID),0)
FROM caWorkType

ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(@MaxID,1)

Ошибка, которую я получаю: «Неверный синтаксис рядом с @MaxID». Я проверил, и @MaxID устанавливается в 45 оператором select. Временная таблица #WorkType также не имеет столбца с именем «_RowID»

Ответы [ 2 ]

4 голосов
/ 30 ноября 2009

Предложение IDENTITY не любит переменные. Используйте sp_executesql для запуска оператора ALTER:

-- Get CurrentRowCount
DECLARE @MaxID INT

SELECT @MaxID = ISNULL(MAX(WorkTypeID),0)
FROM caWorkType

DECLARE @sql varchar(max);
SET @sql = 'ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(' +
        CAST(@MaxID as varchar) +
        ',1)';
EXEC sp_executesql @statement = @sql;
2 голосов
/ 30 ноября 2009

Это не попытка добавить столбец во временную таблицу, которая дает сбой, но вы не можете использовать переменную при указании значений для IDENTITY:

НЕ ОК :

ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(@MaxID,1)

OK

ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(55,1)

Марк

...