Kom ihåg mig?
Home Menu

Menu


Konvertera MSSQL query till MYSQL

Ämnesverktyg Visningsalternativ
Oläst 2015-10-27, 11:15 #1
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
Exclamation 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 + "') 
BEGIN
INSERT INTO IF_sessions(session_id, created, expires, session_name, session_data) 
Values('" + sSession_id + "', GETDATE(), '" + System.DateTime.Now.AddHours(2) + "', '" + sSession_name + "', '" + sSession_data + "') 
END 
ELSE 
BEGIN 
UPDATE IF_sessions SET expires = GETDATE(), session_data = '" + sSession_data + "' WHERE session_id = '" + sSession_id + "' AND session_name = '"+ sSession_name + "'
END

Senast redigerad av naak2803 den 2015-10-27 klockan 11:27
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-10-27, 11:16 #2
Nerix Nerix är inte uppkopplad
Flitig postare
 
Reg.datum: Oct 2010
Inlägg: 398
Nerix Nerix är inte uppkopplad
Flitig postare
 
Reg.datum: Oct 2010
Inlägg: 398
Börja med att posta din SQL-kod och inte din .NET-kod.
Nerix är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-10-27, 11:52 #3
SvanteH SvanteH är inte uppkopplad
Medlem
 
Reg.datum: Jan 2015
Inlägg: 118
SvanteH SvanteH är inte uppkopplad
Medlem
 
Reg.datum: Jan 2015
Inlägg: 118
Citat:
Ursprungligen postat av Nerix Visa inlägg
Börja med att posta din SQL-kod och inte din .NET-kod.
Det är väl inget fel på den SQL koden?
SvanteH är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-10-27, 20:57 #4
qson qson är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Sep 2006
Inlägg: 513
qson qson är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Sep 2006
Inlägg: 513
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".
qson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-10-27, 21:12 #5
qson qson är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Sep 2006
Inlägg: 513
qson qson är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Sep 2006
Inlägg: 513
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 + "'");

if (count == 0) {
    ExecuteSql("INSERT INTO IF_sessions(session_id, created, expires, session_name, session_data) 
Values('" + sSession_id + "', NOW(), '" + System.DateTime.Now.AddHours(2) + "', '" + sSession_name + "', '" + sSession_data + "') "
}
else {
    ExecuteSql("UPDATE IF_sessions SET expires = NOW(), session_data = '" + sSession_data + "' WHERE session_id = '" + sSession_id + "' AND session_name = '"+ sSession_name + "'")
}
qson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-10-28, 09:36 #6
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
Citat:
Ursprungligen postat av qson Visa inlägg
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 + "'");

if (count == 0) {
    ExecuteSql("INSERT INTO IF_sessions(session_id, created, expires, session_name, session_data) 
Values('" + sSession_id + "', NOW(), '" + System.DateTime.Now.AddHours(2) + "', '" + sSession_name + "', '" + sSession_data + "') "
}
else {
    ExecuteSql("UPDATE IF_sessions SET expires = NOW(), session_data = '" + sSession_data + "' WHERE session_id = '" + sSession_id + "' AND session_name = '"+ sSession_name + "'")
}
jo, detta funkar! MEN det blir två st queries till database, försöker göra det med endast en.
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-10-28, 12:03 #7
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
Citat:
Ursprungligen postat av naak2803 Visa inlägg
jo, detta funkar! MEN det blir två st queries till database, försöker göra det med endast en.
Det betyder inte att det blir snabbare för det. Skall du hålla på och extremoptimera (behövs antagligen inte alls) kan du börja med att skriva om det till Stored Procedure.
jayzee är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-10-28, 16:44 #8
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
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#
OleDbCommand command = new OleDbCommand("SampleProc", connection);
command.CommandType = CommandType.StoredProcedure;

OleDbParameter parameter = command.Parameters.Add(  "RETURN_VALUE", OleDbType.Integer);
parameter.Direction = ParameterDirection.ReturnValue;

parameter = command.Parameters.Add(  "@InputParm", OleDbType.VarChar, 12);
parameter.Value = "Sample Value";

parameter = command.Parameters.Add(  "@OutputParm", OleDbType.VarChar, 28);
parameter.Direction = ParameterDirection.Output;

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
USE AdventureWorks2012;
GO
CREATE PROCEDURE HumanResources.uspGetEmployeesTest2 
    @LastName nvarchar(50), 
    @FirstName nvarchar(50) 
AS 

    SET NOCOUNT ON;
    SELECT FirstName, LastName, Department
    FROM HumanResources.vEmployeeDepartmentHistory
    WHERE FirstName = @FirstName AND LastName = @LastName
    AND EndDate IS NULL;
GO

Kod:
-- Anropa en SP för att testa
EXECUTE HumanResources.uspGetEmployeesTest2 N'Ackerman', N'Pilar';
-- Or
EXEC HumanResources.uspGetEmployeesTest2 @LastName = N'Ackerman', @FirstName = N'Pilar';
GO
-- Or
EXECUTE HumanResources.uspGetEmployeesTest2 @FirstName = N'Pilar', @LastName = N'Ackerman';
GO

Senast redigerad av Conny Westh den 2015-10-28 klockan 16:57
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-10-28, 20:33 #9
qson qson är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Sep 2006
Inlägg: 513
qson qson är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Sep 2006
Inlägg: 513
Citat:
Ursprungligen postat av naak2803 Visa inlägg
jo, detta funkar! MEN det blir två st queries till database, försöker göra det med endast en.
Jo, det stämmer, men i din ursprungliga fråga kommer den ändå göra två sökningar i databasen. I ena fallet skickar du ett kommando om att göra två och i andra fallet skickar du två kommandon för två sökningar.

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) 
Values('...', ..., '...', '...', '....') 
ON DUPLICATE KEY UPDATE
expires = '...', 
session_data = '...'
qson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-01-12, 12:08 #10
terbon terbon är inte uppkopplad
Medlem
 
Reg.datum: Jul 2008
Inlägg: 69
terbon terbon är inte uppkopplad
Medlem
 
Reg.datum: Jul 2008
Inlägg: 69
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.
terbon är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 19:16.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017