T-SQL从未按预期工作的状态删除
很可能是我的语法不正确,我只是没有意识到 我有一个这样定义的表:T-SQL从未按预期工作的状态删除,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,很可能是我的语法不正确,我只是没有意识到 我有一个这样定义的表: -- Get all of the PatientVisitOID for which we want data DECLARE @VisitOID TABLE (PatientVisitOID INT) INSERT INTO @VisitOID SELECT DISTINCT PatientVisitOID FROM SMSDSS.c_covid_ptvisitoid_tbl 然后我开始将数据放入表@patientvisi
-- Get all of the PatientVisitOID for which we want data
DECLARE @VisitOID TABLE (PatientVisitOID INT)
INSERT INTO @VisitOID
SELECT DISTINCT PatientVisitOID
FROM SMSDSS.c_covid_ptvisitoid_tbl
然后我开始将数据放入表@patientvisitdata-dss
(历史数据仓库)和@patientvisitdata-prd
(今天的生产只在任何给定的一天进行)
我运行了一个类似这样的查询,可以正常工作(从临时数据Whare house表中删除所有记录,其中访问id位于PROD中-我们需要PROD版本):
然后在它的正下方我运行了这个(这不起作用-从prod temp表中删除不在@VisitOID
中原始id号列表中的记录)我觉得这应该删除422条记录并保留76条:
DELETE FROM @PatientVisitDataPRD
WHERE PatientVisitOID NOT IN (SELECT A.PatientVisitOID FROM @VisitOID AS A)
我知道存在应该删除的记录,因为我可以运行以下程序并获得几百条记录(422条记录):
我还可以通过运行查看应保存的记录(76条记录):
目前,在
@PatientVisitDataPRD
中有498条记录,其中76条记录在内部联接中,422条记录在右侧联接中,其中A.PatientVisitOID为NULL,这使我相信这些422条记录应该从从@PatientVisitDataPRD
查询中删除。不在
中强烈建议不要使用子查询,因为如果子查询中的任何值为NULL
,子查询的行为会意外。在您的情况下,这将导致不删除任何行,我认为这是您的问题
相反,请尝试不存在
:
DELETE pv
FROM @PatientVisitDataPRD pv
WHERE NOT EXISTS (SELECT 1
FROM @VisitOID v
WHERE v.PatientVisitOID = pv.PatientVisitOID
);
强烈建议不要使用子查询的
不在
中,因为如果子查询中的任何值为NULL
,则其行为会意外。在您的情况下,这将导致不删除任何行,我认为这是您的问题
相反,请尝试不存在
:
DELETE pv
FROM @PatientVisitDataPRD pv
WHERE NOT EXISTS (SELECT 1
FROM @VisitOID v
WHERE v.PatientVisitOID = pv.PatientVisitOID
);
谢谢,我会尝试一下,也许表中的单个空值就是问题所在?@MCP\u infirator。不是“也许”。当然可以。谢谢你的帮助谢谢你我会尝试一下,也许表中的单个空值就是问题所在?@MCP\u infirator。不是“也许”。当然可以。谢谢你的帮助。这回答了你的问题吗?这回答了你的问题吗?
SELECT A.PatientVisitOID
FROM @PatientVisitDataPRD AS A
INNER JOIN @VisitOID AS B ON A.PatientVisitOID = B.PatientVisitOID
DELETE pv
FROM @PatientVisitDataPRD pv
WHERE NOT EXISTS (SELECT 1
FROM @VisitOID v
WHERE v.PatientVisitOID = pv.PatientVisitOID
);