почему "выбор в" в цикле приводит к ошибке "уже объект с именем" - PullRequest
0 голосов
/ 18 октября 2011

Как можно решить эту ошибку? Код выдает ошибку, когда @count достигает 1:

В базе данных уже есть объект с именем did2.

Я прочитал, что мне не разрешено использовать select into дважды в цикле (по любой причине, в PL / SQL это очень стандартный шаблон).

BEGIN
DECLARE @count INT
SET @count = 0
WHILE (@count < 200)
BEGIN
    DECLARE @did2 DATETIME
    SELECT DATEADD(ss, @count, '01.01.2002 00:00:00') as did2 into did2 -- throws an error the 2nd time
    INSERT INTO [DbPriceHistorTesty].[dbo].[QuoteHistories]
               ([Id]
               ,[ContractId]
               ,[Open]
               ,[Close]
               ,[Min]
               ,[Max]
               ,[SenderId]
               ,[CreatedAt])
         VALUES (
               @did2
               ,1
               ,1
               ,1
               ,1
               ,1
               ,'1'
               ,GETDATE())
   SET @count = (@count + 1)
END
END

Ответы [ 4 ]

3 голосов
/ 18 октября 2011

Вы создаете таблицу did2 для каждого представителя.

Вы, вероятно, хотите это вместо этого.

SELECT @did2 = DATEADD(ss, @count, '01.01.2002 00:00:00')

Вам также следует рассмотреть возможность изменения формата даты на ГГГГ-ММ-ДДЧЧ: ММ: СС.

Таким образом, вы не будете зависеть от локальных настроек даты и времени.

1 голос
/ 18 октября 2011

Измените код, как показано ниже, это решит вашу проблему:

SET @did2 = DATEADD(ss, @count, '01.01.2002 00:00:00') 

и объявит переменную вне цикла.

0 голосов
/ 18 октября 2011

Проблема в том, что SELECT INTO создает новую таблицу с той же схемой, что и объект в предложении FROM.Эта ошибка произойдет, если в базе данных уже есть объект с именем (в данном случае 'did2').

Вам потребуется создать таблицу приема вне цикла, чтобы это было успешным.

0 голосов
/ 18 октября 2011

Ну, выберите в создает и вставляет в таблицу .. во второй раз таблица уже существует ..

Я бы предложил использовать CREATE TABLE вне цикла, а затем INSERT внутри цикла (если это то, что вы пытаетесь сделать)

Другие ответы, вероятно, лучше, чем мои, потому что они поняли тот факт, что вы на самом деле не пытаетесь вставить в таблицу, а скорее переменную

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...