首页 > 解决方案 > 使用 PXDatabase 删除具有空字段的记录

问题描述

使用 PXDATABASE 删除表中特别包含空值的记录的正确方法是什么?

标签: acumatica

解决方案


我将展示使用 PXDatabase 方法处理 NULL 的错误方法和正确方法。

这是错误方法的一个例子。

PXDatabase.Delete<CWPAYINT>(
            new PXDataFieldRestrict<CWPAYINT.linePmtAmt>(PXDbType.Decimal, 0),
            new PXDataFieldRestrict<CWPAYINT.status>(PXDbType.VarChar, null)
        );

这将产生以下 SQL 脚本,这不是我们想要的:

exec sp_executesql N'DELETE FROM CWPAYINT WHERE [linePmtAmt] = @P0 AND [status] = @P1 AND CompanyID = 2',N'@P0 decimal(1,0),@P1 varchar(8000)',@P0=0,@P1=NULL

这是处理 NULL 的正确方法:

PXDatabase.Delete<CWPAYINT>(
            new PXDataFieldRestrict("linePmtAmt", 0),
            new PXDataFieldRestrict("status", PXDbType.VarChar, 1, null, PXComp.ISNULL)

);

这是所需的 SQL 脚本:

exec sp_executesql N'DELETE FROM CWPAYINT WHERE [linePmtAmt] = @P0 AND [status] IS NULL AND CompanyID = 2',N'@P0 int',@P0=0

推荐阅读