返回具有空值的条目的存储过程(如果不是)

Stored procedure returning an entry with null values (when it's not)

出于某种原因,当我尝试使用条目的 ID 执行查询(通过 API)时,我获得了包含空属性的访问权限。但是,如果我使用其他属性(除了 ID)执行问题,它具有正确的值。

例如:当我执行(实际存储过程代码)时:

CREATE PROCEDURE [dbo].[spClient_GetById]
    @Id int
AS
BEGIN
    SELECT *
    FROM dbo.Client
    WHERE Id = @Id;
END

我得到条目

{
    "id": 2,
    "firstName": null,
    "lastName": null,
    "email": null,
    "phoneNumber": null,
    "houseNum": "1212",
    "street": "Downtown",
    "state": "WA",
    "city": "Vancouver",
    "cost": 12000.0000,
    "status": "Started",
    "eta": 0,
    "startDate": null,
    "completeDate": null,
    "contractorID": 0
}

但是当我在同一数据库上执行以下查询时,

CREATE PROCEDURE [dbo].[spClient_GetByHouse]
    @HouseNum nvarchar(10),
    @Street nvarchar(50) = null
AS
    IF @Street IS NULL
    BEGIN
        SELECT *
        FROM dbo.Client
        WHERE HouseNum = @HouseNum;
    END
    ELSE
    BEGIN
        SELECT *
        FROM dbo.Client
        WHERE HouseNum = @HouseNum AND Street LIKE @Street;
    END

我得到以下条目(顺便说一句,相同的条目):

{
    "id": 2,
    "firstName": "This",
    "lastName": "That",
    "email": "qwe@yahoo.com",
    "phoneNumber": "3603602334",
    "houseNum": "1212",
    "street": "Downtown",
    "state": "WA",
    "city": "Vancouver",
    "cost": 12000.0000,
    "status": "Started",
    "eta": 0,
    "startDate": null,
    "completeDate": null,
    "contractorID": 1
}

此外,如果我在 SQL 服务器中执行 SQL 代码,它会 returns 所有正确的值。所以,问题是当我通过 API 调用该存储过程时,它在应该的时候返回空值。

此外,名字、姓氏和 phone 数字定义为不允许在架构中出现空值

更多信息:这里是调用查询我的ID存储过程的函数:

public async Task<ClientModel> GetProjectById(int id)
{
    var records = await _dataAccess.LoadData<ClientModel, dynamic>("dbo.spClient_GetById", new { Id = id },
                                                                        _connectionString.SqlConnectionName);
    return records.FirstOrDefault();
}

这里是通过其他属性调用查询的函数:

public async Task<ClientModel> GetProjectByHouse(string house, string? street)
{
    var p = new { HouseNum = house, Street = street };
    var records = await _dataAccess.LoadData<ClientModel, dynamic>("dbo.spClient_GetByHouse", p,
                                                                        _connectionString.SqlConnectionName);
    return trimValues(records.FirstOrDefault());
    // return records.FirstOrDefault();
}

这里是 API 函数,用于调用之前的任一函数:

public async Task<IActionResult> Get(int? projectId, string? house, string? street)
{
    if (projectId != null)
    {
        var project = await _clientData.GetProjectById(projectId ?? default(int));

        if (project == null)
            return NotFound();

        return Ok(project);
    }
    else if (house != null)
    {
        if (house.Length < 2)
            return BadRequest();

        var project = await _clientData.GetProjectByHouse(house, street);

        if (project == null)
            return NotFound();

        return Ok(project);
    }
    else
    {
        return BadRequest();
    }
}

不确定这是否解决了问题(但问题已解决)。我不得不删除旧数据库并重新发布一个新数据库。