Я использую SQL Server 2008 и хочу создать процедуру, которая просто берет данные из одной таблицы и вставляет ее в другую таблицу. Вот то, что я до сих пор:Что случилось с моим заявлением INSERT? 44
CREATE PROCEDURE consomVspPools (@start DATE, @end DATE)
AS
CREATE TABLE dbo.temp (pool NVARCHAR (250), endUsedCapacityInKB FLOAT,
startUsedCapacityInKB FLOAT)
WHILE (@end >= @start)
BEGIN
INSERT INTO temp
SELECT pool, MAX(capacityInKB), MAX(freeCapacityInKB)
FROM Vsp_Pool
WHERE dateCollecte IN (DATEADD(day, -1, @end), @end)
GROUP BY pool
SET @end = DATEADD(day, -1, @end)
END
SELECT *
FROM temp
DROP TABLE dbo.temp
Я сейчас код не действительно много знаю, но я должен был упростить это много, чтобы сузить свою ошибку (который не помог мне много в любом случае) , Я получаю ошибку говорит:
«Имя столбца или количество предоставленных значений не соответствует определению таблицы»
Я новичок в SQL, так что это может быть очевидным, но я не вижу, все, кажется, в заказывайте мне.
EDIT1:
так это код, я знаю, что есть, модернизирован как предложено:
CREATE PROCEDURE consomVspPools (@start DATE, @end DATE)
AS
CREATE TABLE #dbo.temp (pool NVARCHAR (250), endUsedCapacityInKB FLOAT,
startUsedCapacityInKB FLOAT)
WHILE (@end >= @start)
BEGIN
INSERT INTO temp (pool, endUsedCapacityInKB, startUsedCapacityInKB)
SELECT pool, MAX(capacityInKB), MAX(freeCapacityInKB)
FROM Vsp_Pool
WHERE dateCollecte IN (DATEADD(day, -1, @end), @end)
GROUP BY pool
SET @end = DATEADD(day, -1, @end)
END
SELECT *
FROM temp
DROP TABLE #dbo.temp
Но это потом дает мне ошибку folowwing:
«Неверное имя столбца 'пул' "
Только FYI, пул присутствует в таблице Vsp_Pool, а также в temp.
Я бы начал с использования некоторых лучших практик - полностью квалифицируйте свои объекты (database.schema.temp, database.schema.vsp_pool), перечислите свои столбцы вставки ('INSERT INTO database.schema.temp (пул, endUsedCapacityInKB, startUsedCapacityInKB) SELECT ... ') и используйте временную таблицу:' CREATE TABLE #Temp ... ' –
Еще одна вещь. Это процедура, и вы создаете постоянную таблицу. Эта процедура завершится неудачей во второй раз, поскольку она будет существовать. Я бы рекомендовал изменить это на временную таблицу. create table #temp ... –
Я просто заметил, что вы также бросаете стол в конце. Тьфу !!! Не требуется постоянная таблица или даже временная. Просто выберите нужные данные в одном операторе select. –