SQL错误:“数据库中已存在名为XXXX的对象”

时间:2010-08-20 22:08:32

标签: sql sql-server

这是我的查询。我想要做的是每周运行此查询,因此表PlanFinder.InvalidAwps将有新记录。但是当我运行查询时,它给了我这个错误:

There is already an object named 'InvalidAwps' in the database. 

我无法更改表名。它必须保持不变。那么我怎样才能每周运行这个查询,保持表名不变?

-------------------------------------
IF  EXISTS (SELECT * FROM sys.objects  
WHERE object_id = OBJECT_ID(N'[PlanFinder].[InvalidAwps]')  
AND type in (N'U')) 
BEGIN 
      DROP TABLE [PlanFinder].[InvalidAwps] 
END 

SELECT DISTINCT P.Ndc Ndc, A.Price AwpUnitCost INTO PlanFinder.InvalidAwps
FROM
    PlanFinder.PlanFinder.HpmsFormulary P
    LEFT JOIN (SELECT Ndc, Price FROM MHSQL01D.Drug.FdbPricing.vNdcPrices 
               WHERE PriceTypeCode = '01' AND CurrentFlag = 1) A
ON P.Ndc = A.Ndc 
WHERE (A.Ndc IS NULL OR A.Price <= 0 OR A.Price IS NULL)
AND p.Ndc IS NOT NULL 
----------------------------------------------

3 个答案:

答案 0 :(得分:7)

为什么每次都要完成删除和重新创建表格的工作?相反,创建一次表然后继续:

truncate table [PlanFinder].[InvalidAwps]
go

insert into [PlanFinder].[InvalidAwps]
    (Ndc, AwpUnitCost)
    SELECT DISTINCT P.Ndc Ndc, A.Price AwpUnitCost
    FROM
        PlanFinder.PlanFinder.HpmsFormulary P
        LEFT JOIN (SELECT Ndc, Price FROM MHSQL01D.Drug.FdbPricing.vNdcPrices 
                   WHERE PriceTypeCode = '01' AND CurrentFlag = 1) A
    ON P.Ndc = A.Ndc 
    WHERE (A.Ndc IS NULL OR A.Price <= 0 OR A.Price IS NULL)
    AND p.Ndc IS NOT NULL 

答案 1 :(得分:1)

SQL的第一部分检查dbo模式中存在的名为YourTableName的表,我猜这应该是InvalidAwps?您需要更改架构和表名以匹配[PlanFinder].[InvalidAwps],并且您不应该遇到任何问题。

目前,您永远不会丢弃表,因为架构和/或表名称不匹配。

哇!这就像一个完全不同的问题......

在启动Select语句之前,可能需要GO

-------------------------------------
IF  EXISTS (SELECT * FROM sys.objects  
WHERE object_id = OBJECT_ID(N'[PlanFinder].[InvalidAwps]')  
AND type in (N'U')) 
BEGIN 
      DROP TABLE [PlanFinder].[InvalidAwps] 
END 
Go

答案 2 :(得分:0)

您可以尝试简单版本:

if object_id('[PlanFinder].[InvalidAwps]') is not null
    drop table [PlanFinder].[InvalidAwps]

另一种选择是在表格下拉和插入之间放置go

drop table [PlanFinder].[InvalidAwps]
go
select ... into [PlanFinder].[InvalidAwps]

SQL Server在执行SQL之前解析SQL,并且在解析过程中表仍然存在。