我有從外部文件中讀取的json數據。有時json已經有了一個特定的id,有時候不是。如果id存在,從json插入數據庫
我想添加此json數據到sql server數據庫,基於這些id的。如果id存在,不要創建一個新的,使用現有的(從json)...如果它不存在,創建一個新的id。 (guid)
當我運行我的代碼時,我收到錯誤插入不是有效數字錯誤。
這是我的存儲過程
CREATE PROCEDURE dbo.Book_Insert
@book NVARCHAR(MAX),
@id uniqueidentifier
AS
BEGIN
--if id exists from json (backend code)
IF EXISTS (SELECT * FROM [Book] WHERE Id = @id)
BEGIN
INSERT INTO [Book] (Id, [Title], Author)
SELECT Id, [Title], Author
FROM OPENJSON(@book)
WITH (Id uniqueidentifier,
[Title] nvarchar(255),
Author nvarchar (255))
END
ELSE
--if id doesn't exist yet
BEGIN
DECLARE @book_Id char(36)
DECLARE @pkTable TABLE (NewPK UNIQUEIDENTIFIER)
INSERT INTO [Book] (Title], Author) OUTPUT INSERTED.Id INTO @pkTable
SELECT [Title], Author
FROM OPENJSON(@book)
WITH ([Title] nvarchar(255),
Author nvarchar (255),)
SET @book_Id = (SELECT * FROM @pkTable)
SELECT @book_Id as ID;
END
END
我的代碼添加數據
public Task<Book> InsertBook(Book book)
{
return _dbManager.ExecuteStoredProcedureAsync<Book>("Book_Insert", new Dictionary<string, object>() {
{ "@book", JsonConvert.SerializeObject(book, jsonSerializerSettings)},
{ "@id", book.Id},
});
}
假名單與一些隨機數據
public List<Book> listOfBooks()
{
var bookList = new List<Book>
{
new Book
{
Id = Guid.NewGuid(),
Title = "Song of ice and fire",
Author = "unknown"
}
};
return bookList;
}
在這種情況下,加控制
Book _book = new Book();
_book = await _bookInterface.InsertBook(new Book()
{
Id = _b.Id, //id exists here
Title = _b.Title,
Author = _b.Author,
});
,_b是循環值(的foreach書)
我不知道我做錯了,但我肯定需要幫助。
可能是程序有問題,也許這甚至不是一個好方法來檢查後端(json文件)的id是否存在..我真的不知道,我對SQL還不是很好。
任何幫助表示讚賞!
PS - 我不張貼JSON序列化和反序列化的方法,當我調試他們,他們的工作只是罰款
首先,你錯過了在INSERT語句中逗號:INSERT INTO [圖書](ID,標題,作者) –
也是在這裏,我想你的SQL是格式不正確:INSERT INTO(圖書,標題,作者)OUTPUT INSERTED.Id INTO @pkTable –
將一種語言翻譯爲英文只是一個錯字@alaa_sayegh – aiden87