这是我的查询。我想要做的是每周运行此查询,因此表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
----------------------------------------------
答案 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,并且在解析过程中表仍然存在。