2015-01-16 26 views
0

我收到錯誤消息,說明數據庫中已存在名爲「Bank_Test」的對象。我使用了Drop tableDrop procedure函數,但它仍然給我同樣的錯誤信息。我試着改變名字,但它仍然給出相同的錯誤信息。請幫忙!錯誤:數據庫中已有名爲'TableName'的對象

USE [Test_1] 
GO 
Create Procedure [dbo].[Bank_Test] 
AS 
SELECT DISTINCT a.PatientAccountID 'AccountId' 
     ,a.PatientLocationName 'Location’ 
     ,b.OrderAbbreviation 'OrderAbbreviation' 
     ,b.OrderId 'OrderId' 
     ,b.CreationTime 'CreationTime' 

INTO Test_1.dbo.Bank_Test 

FROM dbo.PatientVisit a with (nolock) 
INNER JOIN dbo.Order b with (nolock) 
ON a.PatientVisit_oid=b.PatientVisit_oid 
WHERE a.VisitTypeCode= 'IP' 
AND a.LastName != 'Testdummy' 
ORDER BY a.PatientAccountID 

錯誤消息:

Msg 2714, Level 16, State 3, Procedure BloodTest, Line 3
There is already an object named 'BloodTest' in the database.

+0

右鍵單擊存儲過程目錄並單擊刷新。如果這不能讓我知道 –

+0

嘗試將過程的名稱更改爲其他內容...看起來像存儲過程和表名是相同的,不知道這是否是一個問題。 – dellyjm

+0

另外你的創建過程聲明Bank_Test ...你的錯誤狀態BloodTest? –

回答

0

嘗試第一次投放該項目:Drop Procedure

您運行過程中的最後一次,創建對象,則該過程失敗。

USE [Test_1] 
GO 
Drop Procedure [dbo].[Bank_Test] -- call this first 
Create Procedure [dbo].[Bank_Test] 
AS 
SELECT DISTINCT a.PatientAccountID 'AccountId' 
     ,a.PatientLocationName 'Location’ 
     ,b.OrderAbbreviation 'OrderAbbreviation' 
     ,b.OrderId 'OrderId' 
     ,b.CreationTime 'CreationTime' 

INTO Test_1.dbo.Bank_Test 

FROM dbo.PatientVisit a with (nolock) 
INNER JOIN dbo.Order b with (nolock) 
ON a.PatientVisit_oid=b.PatientVisit_oid 
WHERE a.VisitTypeCode= 'IP' 
AND a.LastName != 'Testdummy' 
ORDER BY a.PatientAccountID 

最有可能的是,該過程仍然存在(至少在垃圾收集器需要它之前)。

+0

SO用戶沒有執行存儲過程'需要EXEC dbo.Bank_Test' –

+0

我不明白你寫了什麼,Jeff。當他試圖執行CREATE PROCEDURE語句時,你是否認爲他的錯誤消息不是**? – jp2code

+1

這就是我拿它的方式。 SO用戶聲稱我將它作爲SO用戶,認爲該表將在不執行存儲過程的情況下創建。爲了防萬一,我在下面寫了另一個答案。 –

0

由於你的表處於相同的數據庫狀態,所以這個INTO Bank_Test而不是這個INTO Test_1.dbo.Bank_Test ......我相信DBMS認爲你試圖插入你的存儲過程。我只使用dbo.whatever引用另一個數據庫中的表時。

此外,動詞添加到您的存儲過程,因爲它是「做什麼」

CreateBankTest

1

的問題來自於事實,你的存儲過程正試圖在運行它來創建一個表命名爲Bank_Test。由於您已經有一個名爲Bank_Test的proc,它會因您提供的錯誤而失敗。

只是一個猜測,但我打賭你想插入記錄到表中,而不是SELECT ... INTO。 「選擇進入」每次都會創建一個新表,這可能不是您想要的。您可能想要將記錄添加到現有表中,如下所示

INSERT INTO your_table (columns) 
SELECT things_go_here 
+0

這可能是答案 –

+1

每次他運行該proc時,他都會創建一個新表。它只會一次(最多)一次沒有錯誤。 – Becuzz

+0

正確...因爲表已經用'SELECT INTO'創建......必須改成'INSERT INTO' –

相關問題