Saya memiliki aplikasi yang berfungsi dengan baik menggunakan MySQL/MariaDB-Database.
Saya membuatnya lebih fleksibel dan sekarang saya pada dasarnya dapat menggunakan database Microsoft SQL-Server.

Saya menemukan, bahwa beberapa kueri SQL TIDAK berfungsi lagi.
Saya tidak memiliki pengalaman dengan MS-SQL dan saya mencari dukungan untuk mengonversi kueri berikut agar berfungsi dengan MS-SQL. Akan sangat bagus, jika kueri dapat dikonversi agar berfungsi di MS-SQL dan MySQL ...

Saya telah membuat SQL-Fiddle dengan beberapa contoh-data.
Tautan: http://sqlfiddle.com/#!18/5fb718/2

Query itu sendiri terlihat seperti ini:

SELECT computermapping.PrinterGUID, computerdefaultprinter.PrinterGUID IS NOT NULL AS isDefaultPrinter
FROM computermapping 
LEFT JOIN computerdefaultprinter ON computerdefaultprinter.ComputerGUID = computermapping.ComputerGUID 
AND computerdefaultprinter.PrinterGUID = computermapping.PrinterGUID
WHERE computermapping.ComputerGUID = "5bec3779-b002-46ba-97c4-19158c13001f"

Ketika saya menjalankan ini di SQL-Fiddle saya mendapatkan kesalahan berikut:

Sintaks salah di dekat kata kunci 'IS'.

Ketika saya menjalankan Kueri ini di Microsoft SQL Server Management Studio, saya mendapatkan Kesalahan yang sama. Saya memiliki Instalasi Jerman ...

Meldung 156, Ebene 15, Status 1, Zeile 1
Sintaks Falsche di der Nähe des IS-Schlüsselworts.

Saya mencari di Internet untuk menemukan informasi tentang cara menggunakan IS NOT NULL AS di MS-SQL. Mungkin saya menggunakan kata kunci yang salah, tetapi saya sendiri tidak dapat menemukan solusinya.

Jika memang penting, saya menggunakan "SQL-Server 2014 SP3" saat ini.

Terima kasih

0
Walhalla 8 Januari 2021, 11:21

3 jawaban

Jawaban Terbaik

Mengubah

computerdefaultprinter.PrinterGUID IS NOT NULL AS isDefaultPrinter

Untuk

CASE 
   WHEN computerdefaultprinter.PrinterGUID IS NOT NULL THEN 1 
   ELSE 0 
END AS isDefaultPrinter

Demo disini

Ingatlah juga bahwa tidak ada tipe BOOLEAN di SQL Server. Jenis BIT digunakan sebagai gantinya.

Akhirnya

WHERE computermapping.ComputerGUID = "5bec3779-b002-46ba-97c4-19158c13001f"

Harus diubah menjadi

WHERE computermapping.ComputerGUID = '5bec3779-b002-46ba-97c4-19158c13001f'

Karena karakter kutipan tunggal digunakan untuk membatasi string di SQL Server

3
Giorgos Betsos 8 Januari 2021, 08:30

MySql mengevaluasi ekspresi boolean seperti:

computerdefaultprinter.PrinterGUID IS NOT NULL

Sebagai 1 untuk TRUE atau 0 untuk FALSE.
SQL Server tidak melakukan evaluasi seperti itu, jadi Anda memerlukan ekspresi CASE:

CASE WHEN computerdefaultprinter.PrinterGUID IS NOT NULL THEN 1 ELSE 0 END
2
forpas 8 Januari 2021, 08:25

Pertanyaan persisnya sudah dijawab, tetapi Anda harus benar-benar mencoba menggunakan Asisten Migrasi SQL Server untuk MySQL. Tidak ada database yang mendukung standar SQL di luar tingkat kompatibilitas dasar dan MySQL adalah salah satu database paling unik dalam hal kompatibilitas SQL.

Proses standar SQL sloooow sehingga semua vendor mengimplementasikan fitur jauh sebelum mereka distandarisasi. Basis data yang berbeda memiliki prioritas yang berbeda juga, dan prioritas MySQL untuk dekade pertama setidaknya bukanlah aplikasi perusahaan, jadi kompatibilitas SQL bukanlah prioritas utama.

Beberapa fitur umum ditambahkan hanya di MySQL 8. Beberapa peretasan diizinkan (tetapi tidak disarankan) di MySQL, seperti kolom non-agregat dalam kueri pengelompokan, atau pembaruan unik untuk menghitung nomor baris, tidak berfungsi di basis data lain karena secara logis, mereka menyebabkan hasil yang tidak terduga.

Bahkan di MySQL, kolom non-agregat dapat menyebabkan penurunan kinerja yang serius saat memutakhirkan dari satu versi 5.x ke versi berikutnya. Setidaknya ada satu pertanyaan SO tentang ini.

Asisten Migrasi akan mengonversi tabel dan tipe jika memungkinkan dan menandai prosedur tersimpan atau kueri tampilan yang tidak dapat diterjemahkan. Itu juga dapat menyalin data dari database MySQL yang ada ke database SQL Server

0
Panagiotis Kanavos 8 Januari 2021, 09:10