Gibt es eine einfache Möglichkeit, Transact-SQL in MySQL zu konvertieren?Konvertieren von T-SQL in MySQL
Ich versuche, eine Datenbank Archiv von Börsenticker-Symbole und Firmennamen zu konvertieren.
Gibt es eine einfache Möglichkeit, Transact-SQL in MySQL zu konvertieren?Konvertieren von T-SQL in MySQL
Ich versuche, eine Datenbank Archiv von Börsenticker-Symbole und Firmennamen zu konvertieren.
Die kurze Antwort: NO
Die mittlere Antwort: MAYBE
Die lange Antwort: das hängt davon ab, was in Ihrem TSQL ist und wie viel Zeit und Mühe Sie hineingesteckt .
TSQL ist keine Teilmenge des MySQL-Dialekts. Es gibt also einige TSQL, für die es keine MySQL-Konvertierung gibt. Die Überlappung zwischen den beiden Sprachen ist jedoch ziemlich signifikant, und die Konvertierung ist zu einem gewissen Grad nur eine Frage der Syntax.
Dies ist kein neues Problem, und einige Leute haben versucht, es anzugehen. Eine schnelle Google-Suche nach „tsql to mysql“ liefert einige vielversprechende Ergebnisse, insbesondere das Projekt hier, die gespeicherten Prozeduren von TSQL zu MySQL zu konvertieren versucht:
http://sourceforge.net/projects/tsql2mysql/
Dies wird wahrscheinlich das Problem nicht vollständig lösen, aber es ist zumindest ein Anfang.
Sind die anderen sagen, es hängt davon ab, wie lange Ihr bestimmtes Stück Schnur ist.
Aber ich würde vorschlagen, dass Sie nicht Transact-SQL zu MySQL konvertieren möchten. Wenn Sie darüber nachdenken, werden Sie feststellen, dass Sie es in ODBC konvertieren möchten.
Und dann im nächsten Jahr, wenn das Unternehmen will, dass Sie es zu Oracle oder Access bewegen ...
Ich habe erreicht nur ein Tsql Skript.
Meine Lösung ist:
Ich bin nicht sehr stolz auf mein Code, aber es hat für mich gearbeitet.
4-Dateien wich sind im selben Ordner:
Batch wich Anruf sqlcmd
@echo off
set host= (local)
set schema=database
set user=user
set pass=pass
cd %cd%
rem tables
SQLCMD -S %host% -d %schema% -U %user% -P %pass% -s "" -h-1 -W -i "%CD%\mysql_export_table.sql" -o "%CD%\%schema%_tables.sql"
rem data
SQLCMD -S %host% -d %schema% -U %user% -P %pass% -s "" -h-1 -W -i "%CD%\mysql_export_data.sql" -o "%CD%\%schema%_data.sql"
rem fk
SQLCMD -S %host% -d %schema% -U %user% -P %pass% -s "" -h-1 -W -i "%CD%\mysql_export_fk.sql" -o "%CD%\%schema%_fk.sql"
dann Tsql Skript Tabellenschema mysql_export_table.sql
SET NOCOUNT ON;
SET QUOTED_IDENTIFIER ON;
DECLARE @table_name as varchar(max)
DECLARE view_cursor CURSOR FOR
SELECT Table_name FROM information_schema.tables where TABLE_TYPE = 'BASE TABLE' and table_name not like 'sys%'
OPEN view_cursor
FETCH NEXT FROM view_cursor
INTO @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
select ''
select '/*** TABLE '[email protected]_name+' ***/ '
select 'DROP TABLE IF EXISTS ' + QUOTENAME(@table_name, '`') + ';'
select ''
select 'CREATE TABLE ' + QUOTENAME(@table_name, '`') + ' ('
-- column declaration
select
CHAR(9)
+ QUOTENAME(Column_Name, '`') + ' ' +
DATA_TYPE
+
coalesce('(' + cast(coalesce(replace(CHARACTER_MAXIMUM_LENGTH, -1, 2500), null) as varchar) + ')', '')
+ ' ' +
case IS_NULLABLE WHEN 'NO' then 'NOT ' else '' end + 'NULL'
+ ' ' +
case when COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1 then 'AUTO_INCREMENT' else '' end
--coalesce('DEFAULT ' + replace(replace(replace(COLUMN_DEFAULT, '(', ''), ')', ''), 'getdate', null), '')
+','
FROM information_schema.COLUMNS where TABLE_NAME = @table_name
-- PK
select coalesce('PRIMARY KEY (' +STUFF((
SELECT distinct ', ' + QUOTENAME(Col.Column_Name,'`') from
INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab inner join
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col on Col.Constraint_Name = Tab.Constraint_Name AND Col.Table_Name = Tab.Table_Name
WHERE
Constraint_Type = 'PRIMARY KEY '
AND Col.Table_Name = @table_name
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') , 1, 1, '')+ ')', '')
select ') Engine InnoDB;'
FETCH NEXT FROM view_cursor
INTO @table_name
END
CLOSE view_cursor;
DEALLOCATE view_cursor;
dann Skript zu exportieren für Daten mysql_export_data.sql
SET NOCOUNT ON;
SET QUOTED_IDENTIFIER ON;
DECLARE @table_name as varchar(max)
declare @column_names as varchar(max)
DECLARE view_cursor CURSOR FOR
SELECT Table_name FROM information_schema.tables where TABLE_TYPE = 'BASE TABLE' and table_name not like 'sys%'
OPEN view_cursor
FETCH NEXT FROM view_cursor
INTO @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
select ''
select '/*** TABLE '[email protected]_name+' ***/ '
select @column_names = STUFF((SELECT ', ' + QUOTENAME(Column_Name, '`') from INFORMATION_SCHEMA.COLUMNS WHERE Table_Name = @table_name ORDER BY ORDINAL_POSITION FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') , 1, 1, '')
select 'REPLACE INTO '+ QUOTENAME(@table_name, '`') +'('+ @column_names+ ') VALUES '
select @column_names = 'SELECT DISTINCT ''('+ STUFF((SELECT ', '','''''' + coalesce(replace(cast(' + QUOTENAME(Column_Name) +' as varchar(200)), '''''''',''''), '''') + ''''''''' from INFORMATION_SCHEMA.COLUMNS WHERE Table_Name = @table_name ORDER BY ORDINAL_POSITION FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') , 1, 4, '') + '+''),'' FROM ' + QUOTENAME(@table_name)
exec (@column_names)
FETCH NEXT FROM view_cursor
INTO @table_name
END
CLOSE view_cursor;
DEALLOCATE view_cursor;
Schließlich FK Skript
SET NOCOUNT ON;
SET QUOTED_IDENTIFIER ON;
-- FK
-- foreign keys
SELECT
'ALTER TABLE',
' '+ QUOTENAME(OBJECT_NAME(fkcol.[object_id]), '`'),
--ADD CONSTRAINT `recherche_ibfk_1` FOREIGN KEY (`notaire_compte_id`) REFERENCES `notaire_compte` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
' ADD CONSTRAINT',
' ' + QUOTENAME(fk.name, '`'),
' FOREIGN KEY',
' (' + QUOTENAME(fkcol.name, '`') +')',
' REFERENCES',
' ' + QUOTENAME(OBJECT_NAME(pkcol.[object_id]), '`'),
' (' + QUOTENAME(pkcol.name, '`') + ');',
CHAR(13)
FROM sys.foreign_keys AS fk
INNER JOIN sys.foreign_key_columns AS fkc
ON fk.[object_id] = fkc.constraint_object_id
INNER JOIN sys.columns AS fkcol
ON fkc.parent_object_id = fkcol.[object_id]
AND fkc.parent_column_id = fkcol.column_id
INNER JOIN sys.columns AS pkcol
ON fkc.referenced_object_id = pkcol.[object_id]
AND fkc.referenced_column_id = pkcol.column_id
ORDER BY fkc.constraint_column_id;
Ich weiß, ich weiß ... es ist sehr hässlich ...
Das Ziel dieses Skript nicht TSQL zu Mysql konvertieren aber um Datenbank von MSSQL nach Mysql
zu exportieren Auf dem Tabellenresultat müssen Sie einen Regexreplace (Notizblock ++)ausführenersetzen ", \ r \ n \ r \ n)"
Auf das Datenergebnis ersetzen ", \ r \ n \ r \ n/" durch " ; \ r \ n \ r \ n/ "
Ausführungsreihenfolge: Tabelle -> Daten -> FK
Also, das beweist im Grunde @ tylerls kurze Antwort soweit, soweit ich das beurteilen kann. Obwohl Ihr Beitrag dies tatsächlich ungültig gemacht haben könnte (wenn diese Lösung für viele Leute gut funktioniert, das ist). –
.. es scheint, dass Mysql Workbench es besser macht ... – Madagaga
Wie über SQL Server Linked Server verwenden? Sie können Daten von MySQL mit TSQL
SELECT, INSERT, UPDATE und DELETE Daten, die ich gefunden habe: https://www.youtube.com/watch?v=9OHXCYRYjRs (14 Sept.2013), aber ich habe noch nicht getestet. Ich hoffe, es kann dir helfen. – Nolwennig