Saya memiliki kode berikut
SELECT tA.FieldName As [Field Name],
COALESCE(tO_A.[desc], tO_B.[desc], tO_C.Name, tA.OldVAlue) AS [Old Value],
COALESCE(tN_A.[desc], tN_B.[desc], tN_C.Name, tA.NewValue) AS [New Value],
U.UserName AS [User Name],
CONVERT(varchar, tA.ChangeDate) AS [Change Date]
FROM D tA
JOIN
[DRTS].[dbo].[User] U
ON tA.UserID = U.UserID
LEFT JOIN
A tO_A
on tA.FieldName = 'AID'
AND tA.oldValue = CONVERT(VARCHAR, tO_A.ID)
LEFT JOIN
A tN_A
on tA.FieldName = 'AID'
AND tA.newValue = CONVERT(VARCHAR, tN_A.ID)
LEFT JOIN
B tO_B
on tA.FieldName = 'BID'
AND tA.oldValue = CONVERT(VARCHAR, tO_B.ID)
LEFT JOIN
B tN_B
on tA.FieldName = 'BID'
AND tA.newValue = CONVERT(VARCHAR, tN_B.ID)
LEFT JOIN
C tO_C
on tA.FieldName = 'CID'
AND tA.oldValue = tO_C.Name
LEFT JOIN
C tN_C
on tA.FieldName = 'CID'
AND tA.newValue = tN_C.Name
WHERE U.Fullname = @SearchTerm
ORDER BY tA.ChangeDate
Ketika menjalankan kode saya mendapatkan kesalahan yang disisipkan dalam judul setelah menambahkan dua gabungan untuk tabel C. Saya pikir ini mungkin ada hubungannya dengan fakta saya menggunakan SQL Server 2008 dan telah mengembalikan salinan db ini ke mesin saya yaitu 2005.
sumber
Saya melakukan hal berikut:
Bekerja setiap saat. :)
sumber
Gunakan
collate
klausa dalam kueri Anda:Saya mungkin tidak memiliki sintaks yang tepat (centang BOL), tetapi Anda dapat melakukan ini untuk mengubah collation on-the-fly untuk kueri - Anda mungkin perlu menambahkan klausa untuk setiap bergabung.
sunting: Saya menyadari ini tidak benar - klausa susun berjalan setelah bidang yang perlu Anda ubah - dalam contoh ini saya mengubah susunan di
tA.oldValue
lapangan.sumber
Identifikasi bidang yang dilemparnya kesalahan ini dan tambahkan berikut ini: COLLATE DATABASE_DEFAULT
Ada dua tabel yang tergabung dalam bidang Kode:
Perbarui kueri Anda ke:
sumber
Ini dapat dengan mudah terjadi ketika Anda memiliki 2 database yang berbeda dan 2 database yang berbeda dari 2 server yang berbeda. Pilihan terbaik adalah mengubahnya menjadi koleksi umum dan melakukan join atau perbandingan.
sumber
@ Valkyrie jawaban yang luar biasa. Pikir saya memasukkan kasus di sini ketika melakukan hal yang sama dengan subquery di dalam prosedur tersimpan, karena saya bertanya-tanya apakah jawaban Anda bekerja dalam kasus ini, dan itu luar biasa.
sumber
Di tempat kriteria menambahkan
collate SQL_Latin1_General_CP1_CI_AS
Ini bekerja untuk saya.
sumber
Akar penyebabnya adalah bahwa database server sql tempat Anda mengambil skema memiliki susunan yang berbeda dari instalasi lokal Anda. Jika Anda tidak ingin khawatir tentang collation, instal ulang SQL Server secara lokal menggunakan collation yang sama dengan database SQL Server 2008.
sumber
kesalahan (Tidak dapat menyelesaikan konflik pemeriksaan antara ....) biasanya terjadi saat membandingkan data dari beberapa basis data.
karena Anda tidak dapat mengubah susunan basis data sekarang, gunakan COLLATE DATABASE_DEFAULT.
sumber
Saya memiliki sesuatu seperti ini sebelumnya, dan apa yang kami temukan adalah bahwa susunan antara 2 tabel berbeda.
Periksa apakah ini sama.
sumber
Berkat jawaban marc_s, saya memecahkan masalah awal saya - terinspirasi untuk mengambil langkah lebih lanjut dan memposting satu pendekatan untuk mengubah seluruh tabel pada suatu waktu - skrip tsql untuk menghasilkan pernyataan kolom alter:
mendapat: ALTER TABLE Afiliasi ALTER COLUM myTable NVARCHAR (4000) COLLATE Latin1_General_CI_AS BUKAN NULL
Saya akan mengaku bingung oleh kebutuhan untuk col.max_length / 2 -
sumber
Bagi mereka yang memiliki skrip CREATE DATABASE (seperti kasus saya) untuk database yang menyebabkan masalah ini, Anda dapat menggunakan skrip CREATE berikut untuk mencocokkan collation:
atau
Ini menerapkan susunan yang diinginkan untuk semua tabel, yang memang saya butuhkan. Ini sangat ideal untuk mencoba dan menjaga pemeriksaan yang sama untuk semua database di server. Semoga ini membantu.
Info lebih lanjut tentang tautan berikut: SQL SERVER - Membuat Basis Data dengan Berbagai Susunan di Server
sumber
Saya telah menggunakan konten dari situs ini untuk membuat skrip berikut yang mengubah susunan semua kolom di semua tabel:
sumber
Periksa tingkat susunan yang tidak cocok (server, database, tabel, kolom, karakter).
Jika itu adalah server, langkah-langkah ini membantu saya sekali:
Jalankan perintah ini:
sqlservr -m -T4022 -T3659 -s"name_of_insance" -q "name_of_collation"
Mulai server sql Anda:
net start name_of_instance
Periksa susunan server Anda lagi.
Ini info lebih lanjut:
https://www.mssqltips.com/sqlservertip/3519/changing-sql-server-collation-after-installation/
sumber
Jika ini terjadi di seluruh DB Anda, maka lebih baik untuk mengubah susunan DB Anda seperti:
Rujukan di sini
sumber
Menambahkan kode ke jawaban @ JustSteve untuk menangani kolom varchar dan varchar (MAX):
sumber
Untuk mengatasi masalah ini dalam kueri tanpa mengubah basis data, Anda dapat memberikan ekspresi di sisi lain dari tanda "=" dengan
seperti yang disarankan di sini .
sumber
Saya memiliki kesalahan yang serupa (Tidak dapat menyelesaikan konflik pemeriksaan antara "SQL_Latin1_General_CP1_CI_AS" dan "SQL_Latin1_General_CP1250_CI_AS" dalam operasi INTERSECT), ketika saya menggunakan driver jdbc lama.
Saya menyelesaikan ini dengan mengunduh driver baru dari Microsoft atau proyek open-source jTDS .
sumber
inilah yang kami lakukan, dalam situasi kami, kami memerlukan kueri ad hoc untuk dieksekusi menggunakan batasan tanggal pada permintaan, dan kueri tersebut didefinisikan dalam tabel.
Permintaan baru kami harus mencocokkan data antara database yang berbeda dan memasukkan data dari keduanya.
Tampaknya COLLATION berbeda antara db yang mengimpor data dari sistem iSeries / AS400, dan basis data pelaporan kami - ini bisa jadi karena tipe data spesifik (seperti aksen Yunani pada nama dan sebagainya).
Jadi kami menggunakan klausa gabungan di bawah ini:
sumber
Anda dapat dengan mudah melakukan ini dengan menggunakan 4 langkah mudah
sumber
sumber
Anda mungkin tidak memiliki masalah pengumpulan apa pun di basis data Anda, tetapi jika Anda mengembalikan salinan basis data Anda dari cadangan di server dengan susunan berbeda dari asalnya, dan kode Anda membuat tabel sementara, tabel temporer tersebut akan mewarisi pengumpulan dari server dan akan ada konflik dengan database Anda.
sumber
sumber
Saya memiliki persyaratan serupa; mendokumentasikan pendekatan saya di sini untuk siapa pun dengan skenario yang sama ...
Skenario
Larutan
Gunakan perbandingan skema SQL Server (dari SQL Server Data Tools / Visual Studio) untuk membandingkan sumber (instalasi bersih) dengan tujuan (db dengan susunan tidak valid).
Dalam kasus saya, saya membandingkan dua DB secara langsung; meskipun Anda dapat bekerja melalui proyek untuk memungkinkan Anda untuk secara manual mengubah bagian di antara ...
Object Types
pilih hanya jenis yang Anda minati (bagi saya itu hanyaViews
danTables
)General
pilih:DELETE
folder dan memilihEXCLUDE
.CREATE
objek (di sini karena mereka tidak ada dalam target mereka tidak dapat memiliki susunan yang salah di sana; apakah mereka harus ada adalah pertanyaan untuk topik lain).Update
untuk mendorong perubahanIni masih melibatkan beberapa upaya manual (mis. Memeriksa bahwa Anda hanya memengaruhi pemeriksaan) - tetapi ini menangani dependensi untuk Anda.
Anda juga dapat menyimpan proyek database dari skema yang valid sehingga Anda dapat menggunakan templat universal untuk DB Anda jika Anda memiliki lebih dari 1 untuk memperbarui, dengan asumsi semua DB target harus berakhir dengan skema yang sama.
Anda juga dapat menggunakan temukan / ganti pada file dalam proyek basis data jika Anda ingin mengubah pengaturan di sana secara massal (misalnya agar Anda dapat membuat proyek dari basis data yang tidak valid menggunakan skema bandingkan, mengubah file proyek, kemudian beralih sumber / target dalam skema bandingkan untuk mendorong perubahan Anda kembali ke DB).
sumber