我收到错误消息,说数据库中已存在名为“Bank_Test”的对象。我使用了Drop table
和Drop procedure
函数,但仍然给出了相同的错误消息。我尝试更改名称但仍然提供相同的错误消息。请帮忙!
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
有 已经是数据库中名为“BloodTest”的对象。
答案 0 :(得分:1)
问题来自于您的存储过程在运行名为Bank_Test时尝试创建表的事实。由于您已经有一个名为Bank_Test的proc,它会因您提供的错误而失败。
只是一个猜测,但我打赌你想要将记录插入表中,而不是SELECT ... INTO。 "选择进入"每次都会创建一个新表,这可能不是你想要的。您可能希望将记录添加到现有表中,类似这样的
INSERT INTO your_table (columns)
SELECT things_go_here
答案 1 :(得分: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
最有可能的是,该程序仍然存在(至少在垃圾收集器接受之前)。
答案 2 :(得分:0)
由于您的表处于相同的数据库状态,因此INTO Bank_Test
而不是INTO Test_1.dbo.Bank_Test
...我相信DBMS认为您正在尝试插入存储过程。我只使用dbo.whatever引用另一个数据库中的表。
此外,在您的存储过程中添加一个动词,因为它是"做某事"
即。 CreateBankTest