我有从外部文件中读取的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