2011-10-18 26 views
0

該錯誤如何解決?當@count達到1時,代碼會產生錯誤:爲什麼在一個循環中「select into」會導致錯誤「已經有一個名爲」的對象

數據庫中已有一個名爲'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 
+0

您是否通常是Oracle開發人員? –

回答

3

您正在爲每個代表創建一個表did2

你可能想要這個。

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

您還應該考慮將dateformat更改爲YYYY-MM-DDTHH:MM:SS。

這樣你就不會依賴本地日期時間設置。

+0

這不會解決問題。一個'SELECT INTO'創建一個新的對象,你不能擁有一個現有的對象,這就是爲什麼它不能在循環的第二次迭代中工作。 – 2011-10-18 14:03:03

+0

@ p.campbell啊,很好。感謝您的更正。 – 2011-10-18 14:04:52

1

更改代碼類似下面,它會解決你的問題:

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

,並聲明變量出來的圈上。

0

好了,選擇到創造並插入到表中。該表已經存在,第二次..

我會建議使用CREATE TABLE循環外,然後在循環中插入(如果這就是你「重新嘗試做)

對方回覆很可能比我更好,因爲他們已經拿起您實際上並不試圖插入一個表格,而是一個變量

0

問題的事實是, SELECT INTO創建一個與FROM中的對象具有相同架構的新表條款。如果數據庫中已有名稱的對象(在本例中爲'did2'),則會發生此錯誤。

您需要在循環外部創建接收表才能成功。

相關問題