PDA

View Full Version : مقایسه دو فیلد با COLLATION های مختلف



masoode
شنبه 28 آبان 1401, 10:06 صبح
سلام
collation دیتابیس من Arabic_CI_AS است. من یک لینک دارم به یک دیتابیس دیگر با SQL_Latin1_General_CP1_CI_AS .
جدول دیتابیس دوم مربوط به یک نرم افزار اسپانیایی گران قیمت است و ما اجازه دستکاری در آن را نداریم!
من برای جستجو از این کوئری استفاده می کنم:
SELECT TOP(200) T1.[Id],T1.[Name],T2.CustomerName,[UserId],FORMAT([OrderTime],'yyyy/MM/dd-HH:mm','fa') [OrderTime]
,FORMAT(LastDate,'yyyy/MM/dd-HH:mm','fa') LastDate,PriceListNo
FROM tblProjects T1
INNER JOIN tblCustomers T2 ON T1.CustomerId=T2.id
LEFT JOIN vwLantekLast T3 ON T1.Name=T3.JobRef COLLATE SQL_Latin1_General_CP1_CI_AS
قبل از اینکه بخواهم داده ای از جدول vwLantekLast (در واقع ویو است) به این کوئری جوین کنم با سرعت بسیار خوبی اجرا میشد. vwLantekLast هم به تنهایی با سرعت بسیار بالایی باز میشود. اما چون فیلدهای مورد نیاز در جوین از یک collation نیستند این 200 ردیف را در 6 ثانیه برمیگرداند!! که خیلی کند است!
نوع هر دو فیلد هم varchar است و محتوی آن انگلیسی است. مثلا JOB000123
راه بهتری سراغ دارید؟

یوسف زالی
شنبه 05 آذر 1401, 18:30 عصر
سلام.
یک ایندکسد ویو روی تیبلی که کولیشنش فرق داره بسازید و فیلد مورد نظر رو با کولیشن مورد نظر در ویو اد کنید.
این ویو رو جوین کنید.

masoode
یک شنبه 06 آذر 1401, 10:23 صبح
متاسفانه امکان هر گونه ویرایش روی دیتابیس دوم را ندارم!

mazoolagh
دوشنبه 07 آذر 1401, 09:23 صبح
سلام و روز خوش
من برای آگاهی خودم میپرسم:

1- آیا مشخص کردن collation در join واقعا لازمه؟
یعنی اگر نیاریم خطا میده یا نتایج اشتباه برمیگردونه؟

2- نمیشه اون view رو بصورت temptable در دیتابیس خودتون بیارین و با اون join کنین؟


3- نمیشه فقط collation فیلد name از tblProjects رو به SQL_Latin1_General_CP1_CI_AS تغییر بدین؟