om jag loopar igenom massa fält som skickats från en webbsida och ska för varje fält uppdatera respektive post i databasen. Hur gör jag då om ett fält inte har en post i databasen? Kan man på något sätt ha ett villkor där man kör en update och finns inte posten ska det köra en insert?
Det är så att dte kommer att kanske vara 100 olika fält på sidan och varje fält ska loopas igenom för att skrivas till databasen. Tänkte att fältets namn är desamma som id'et i databasen och då ska värdet från fältet uppdateras i databasen?
Eller ska man för varje fält först kolla om det id'et existerar i databasen, och om det gör det köra en update eller insert fråga? Känns som att det blir rätt tungt att göra så eller??
som sagt, detta är bara i tankestadiet så har inge kod att visa hur jag tänkt mig men kan ju vara bra att ha lite grund innan man sätter igång :)
Det "bygger" på att du har en nyckel (t.ex. primärnyckel eller ett unikt fält) och när det blir en "krock" så uppdateras valfria fält istället för att läggas till.
Du skriver inte vilken DBMS du använder men ovanstående funkar kanon i MySQL.
A sorry, Skulle självklart skriva att det är MSSQL jag använder...
Tror du koden fugerar för det också?
Funktionen verkar ju klockren, precis som jag tänkt.. Jag använder mig av en primärnyckel så det är inga problem, då gäller det bara att hitta kod som fungerar för MSSQL?
Jag har läst följande kod ett par gånger nu utan att blir klok på den:
MERGE dbo.FactBuyingHabits AS Target
USING (SELECT CustomerID, ProductID, PurchaseDate FROM dbo.Purchases) AS Source
ON (Target.ProductID = Source.ProductID AND Target.CustomerID = Source.CustomerID)
WHEN MATCHED THEN
UPDATE SET Target.LastPurchaseDate = Source.PurchaseDate
WHEN NOT MATCHED BY TARGET THEN
INSERT (CustomerID, ProductID, LastPurchaseDate)
VALUES (Source.CustomerID, Source.ProductID, Source.PurchaseDate)
OUTPUT $action, Inserted.*, Deleted.*;
Och det här med merged fattar jag inte, vad jag förstår som så i ovan kod hämtas data från en tabell och flyttas till en annan. "When Matched" förstår jag men inte koden innan. Jag har ju bara en tabell med följande fält: id, discount..
försöka google lite till och se om det finns någon mer lättförstålig kod :)
All SQl kod skrivs ju så olika, ibalnd står det trans-SQL, stored procedure m.m. Men detta är väll inte samma som det jag använder på mina asp sidor när jag skickar en sql fråga?
En STORED PROCEDURE kan man jämföra med en funktion i t.ex. ASP, alltså ett stycke sql frågor fast som lagras i databasen. Den här "funktionen" kan man sedan anropa från din ASP kod.
Jag skulle köra UPDATE först och sedan läsa hur många rader som påverkades. Om du gör UPDATE för en rad så borde du då få svar att en rad har påverkats. Har inga rader påverkats så kör INSERT. Du slipper då börja med att först kolla vilka som finns och vilka som inte finns.
Detta tillvägagångssätt blir dock ineffektivt om INSERT är mycket vanligare än UPDATE.