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, 16:44 #7
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 2016-01-12, 12:08 #8
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 01:23.

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