![]() |
Konvertera MSSQL query till MYSQL
Hej,
skulle behöva lite hjälp med att konvertera om en SQL query från MSSQL till MYSQL. Kod:
IF NOT EXISTS (SELECT * FROM IF_sessions WHERE session_name = '" + sSession_name + "' AND session_id = '"+ sSession_id + "') |
Börja med att posta din SQL-kod och inte din .NET-kod.
|
Citat:
|
Det är inblandat variabler som inte är SQL (sSession_name m.fl.) och så ligger ett anrop till System.DateTime.Now.AddHours(2) som också är .NET så detta är en del av (troligen) c#-kod som genererar SQL. KAn vi få se den genererade sql-koden (det som faktiskt skickas till databasen) så är det lättare att hjälpa till när man slipper "gissa".
|
Jag tror inte du kan använda IF-satser i Mysql om du inte har dem i en funktion. Då får du istället bryta ut koden till separata sql-frågor och göra if-satserna i din applikation istället för i databasen:
Jag skall försöka ge mig på en tolkning av din mix av .NET-kod och SQL till en pseudo-variant. "ExecuteSql" nedan är bara en placeholder för vad du nu har för att exekvera sql-kod. Kod:
var count = ExecuteSql("SELECT COUNT(*) FROM IF_sessions WHERE session_name = '" + sSession_name + "' AND session_id = '"+ sSession_id + "'"); |
Citat:
|
Citat:
|
Jag skulle också rekommendera att skriva om det till en SP som du skickar in värdena till, det blir bättre struktur och snabbare exekvering jämfört med denna dynamiska SQL-sats.
Använd ADO.NET och parameteriserad ADO/SQL så du omöjliggör SQL-Injections när du ändå fixar till koden. https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx Kod:
// C# För att skapa en Stored Procedure i MS SQL-Server se här: https://msdn.microsoft.com/en-us/library/ms345415.aspx Kod:
-- Skapa en SP Kod:
-- Anropa en SP för att testa |
Citat:
Ett sätt att optimera är som jayzee skriver att göra en Stored Procedure. En annan variant är att göra primary key till "SESSION_ID + SESSION_NAME" och sen använda INSERT INTO ... ON DUPLICATE KEY UPDATE http://dev.mysql.com/doc/refman/5.1/...duplicate.html Kod:
INSERT INTO IF_sessions(session_id, created, expires, session_name, session_data) |
Ett annat rätt vanligt tillvägagångssätt är att köra en UPDATE och sen kolla om det var några rader som uppdaterades (affected rows, @@rowcount eller liknande). Då behöver du bara köra en query ifall posten redan fanns, i annat fall blir det två. Men det är oundvikligt.
|
Alla tider är GMT +2. Klockan är nu 02:18. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson