如何从SQL Server返回空JSON数组

时间:2017-08-10 10:02:53

标签: sql arrays sql-server stored-procedures

我有一个包含一些随机数据的数据库,如:

图书

    Id uniqueidentifier,
    title nvarchar(255),
    author nvarchar(255),
    genre nvarchar (255),
    deleted datetime

我的Book表中有很多不同的书。当我想删除一本书时,我真的不会从数据库中删除它,只是在我删除它时设置deleted的日期时间。

这是一个困扰我的案例。

如果用户试图查找(搜索)他删除的书(不再存在),则需要返回空数组

以下是我所做的,但它不起作用:

CREATE PROCEDURE dbo.Book_GetById
    @id uniqueidentifier
AS
BEGIN
    DECLARE @_deleted DATETIME
    SET @_deleted = NULL

    SELECT @_deleted  = Deleted 
    FROM Book 
    WHERE Id = @id

    IF (@_deleted IS NOT NULL) 
    BEGIN
        SELECT JSON_QUERY('[]')
        FOR JSON PATH

这不是整个过程,只是我想通过检查delete是否为空来返回空JSON数组的部分,这意味着为该行设置了一个日期时间 - 书被删除(如果它为null,它没有被删除)。

PS1 :如果还有其他比空数组更好的方式,id也喜欢听到它!

PS2 :我需要"返回"我的单元测试中的数据,通过选中Assert.IsNotNull(book.Deleted);

来查看是否真的删除了图书

当我在单元测试中运行我的调试器时,当我跳过时,我的var booksnull,我认为这不是正确的我猜

1 个答案:

答案 0 :(得分:0)

由于JSON作为NVARCHAR输出返回,为什么不这样做:

IF (@_deleted IS NOT NULL) 
BEGIN
    SELECT '[]'
END ELSE ....