Ich habe eine JSON-Daten, die ich von externen Dateien gelesen. Manchmal hat JSON bereits eine spezifische ID, manchmal nicht.einfügen in die Datenbank von JSON, wenn ID existiert
Ich möchte diese JSON-Daten in SQL Server Datenbank, basierend auf diesen IDs hinzufügen. Wenn die ID existiert, erstellen Sie keine neue, verwenden Sie eine existierende (aus json) ... wenn sie nicht existiert, erstellen Sie eine neue ID. (guid)
Wenn ich meinen Code ausführen, bekomme ich Fehler einfügen ist keine gültige Nummer Fehler.
Das ist meine gespeicherte Prozedur
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
Mein Code für das Hinzufügen von Daten
public Task<Book> InsertBook(Book book)
{
return _dbManager.ExecuteStoredProcedureAsync<Book>("Book_Insert", new Dictionary<string, object>() {
{ "@book", JsonConvert.SerializeObject(book, jsonSerializerSettings)},
{ "@id", book.Id},
});
}
gefälschte Liste mit einigen Zufallsdaten
public List<Book> listOfBooks()
{
var bookList = new List<Book>
{
new Book
{
Id = Guid.NewGuid(),
Title = "Song of ice and fire",
Author = "unknown"
}
};
return bookList;
}
hinzufügen
Steuer
Book _book = new Book();
_book = await _bookInterface.InsertBook(new Book()
{
Id = _b.Id, //id exists here
Title = _b.Title,
Author = _b.Author,
});
in diesem Fall _b geschlungen Wert (foreach Buch)
Ich weiß nicht, was ich falsch mache, aber ich definitiv Hilfe benötigen.
Vielleicht etwas falsch mit der Prozedur, vielleicht ist dies nicht einmal eine gute Möglichkeit zu überprüfen, ob ID aus Backend (JSON-Datei) existiert..ich weiß nicht wirklich, ich bin nicht so gut mit SQL noch.
Jede Hilfe wird geschätzt!
PS - Ich bin Entsendung nicht JSON Serialisierung und Deserialisierung Methoden wie wenn ich sie debuggen sie gut funktionieren
vor allem, verpassten Sie ein Komma in der Insert-Anweisung: INSERT INTO [Buch] (Id, Titel, Autor) –
hier auch, ich glaube, Ihre SQL nicht gut formatiert ist: INSERT INTO (Buch, Titel , Autor) OUTPUT INSERTED.Id IN @pkTable –
es ist nur ein Tippfehler beim Übersetzen von einer Sprache in Englisch @alaa_sayegh – aiden87