2017-08-10 82 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' - 如果沒有,就會得到純文本。 –