2010-08-20 25 views
2

這是我的查詢。我想要做的是每週運行這個查詢,所以表PlanFinder.InvalidAwps將有新的記錄。但是,當我運行查詢它給了我這個錯誤:SQL錯誤:「數據庫中已有一個名爲XXXX的對象」

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 
---------------------------------------------- 

回答

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 
+0

+1,最好截斷並重新加載而不是刪除並重新創建表。 – 2010-08-21 01:10:37

+0

嗨,喬,謝謝你的幫助。但是讓我每個星期都清楚一點,當我運行我的包時,它會截斷PlanFinder.invalidAwps中的舊數據,並且會從查詢的其餘部分加載新數據,是嗎? (對不起,學習SQL) – User7354632781 2010-08-21 23:37:50

+0

是的。截斷將從表中刪除所有現有的數據。 – 2010-08-22 03:51:10

1

您的SQL檢查中存在的dbo模式稱爲YourTableName我猜這應該是InvalidAwps表的第一部分?您需要更改模式和表名以匹配[PlanFinder].[InvalidAwps],並且不應該有任何問題。

就目前而言,由於架構和/或表名稱不匹配,您永遠不會刪除表。

哇!這就像現在一個完全不同的問題...

也許你需要GO,然後再開始你的SELECT語句

------------------------------------- 
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 
+0

他改變了問題 – NullUserException 2010-08-20 22:19:23

+1

@NullUserException - 謝謝你讓我知道。 – codingbadger 2010-08-20 22:29:07

+0

正如你所說的那樣,查詢中的問題肯定是缺少drop table和插入到(GO)之間的批分隔符,但我認爲Joe的答案總體上是一個更好的解決方案。 – 2010-08-21 01:12:42

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,並且該表在解析過程中仍然存在。

+0

謝謝,感謝您的幫助。 – User7354632781 2010-08-21 23:38:33

相關問題