Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL从未按预期工作的状态删除_Sql_Sql Server_Sql Server 2014 - Fatal编程技术网

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