2017-08-10 84 views
0

空的JSON数组我有像一些随机数据的数据库:如何返回从SQL Server

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 

这是不是整个过程,只是一部分,我想如果删除检查,返回一个空的JSON数组不为null,则意味着存在该行的日期时间集 - 薄中删除(如果它为空,则不会被删除)。

请帮忙!

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

PS2:我需要在我的单元测试,以“回归”的数据,看看书真的通过检查Assert.IsNotNull(book.Deleted);

当我运行我的调试器在单元测试中,当我跨过,我var books说删除null,我觉得不是很合适我想

回答

0

由于JSON返回为NVARCHAR输出,何乐而不为呢是这样的:

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

这就是我得到...未使用名称或别名的列表达式和数据源无法使用FOR JSON子句格式化为JSON文本。将别名添加到未命名的列或表。 – aiden87

+0

它确实像那样工作。 SELECT JSON_QUERY('[]')arr – aiden87

+0

我从来没有说过要使用'JSON_QUERY'或'FOR JSON' - 如果没有,就会得到纯文本。 –