خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


رفع خطای Msg 7325 Objects exposing columns with CLR types are not allowed in distributed queries در SQL Server

رفع خطای Msg 7325 Objects exposing columns with CLR types are not allowed in distributed queries در SQL Server
در این پست کوتاه در خصوص ارور Objects exposing columns with CLR types are not allowed in distributed queries با کد 7325 در SQL Server صحبت خواهیم کرد. این ارور احتمالا به دلیل این که شما می خواهید یک distributed query را برای جدولی اجرا کنید که یک یا چند ستون از نوع CLR دارد. به عنوان مثال می توانید کوئری را برای جدولی که ستون های از دیتاتایپ های geography یا geometry استفاده می کند، بکار گیرید. این نوع دیتاتایپ ها بصورت .NET common language runtime یا دیتاتایپ های CLR در SQL Server پیاده سازی شده اند. خوشبختانه پیغام خطا به طور دقیق به مشکل اشاره دارد و مشکل به راحتی قابل حل شدن است.

سیستم یکپارچۀ سازمانی راهکار
کوئری زیر منجر به رخ دادن خطای 7325 می شود:



SELECT TOP(10) *
FROM Homer.WideWorldImportersDW.Dimension.City;

Msg 7325, Level 16, State 1, Line 1
Objects exposing columns with CLR types are not allowed in distributed queries. Please use a pass-through query to access remote object '"WideWorldImportersDW"."Dimension"."City"'.

در این حالت یک distributed query برای یک linked server با نام Homer اجرا شده است. در کوئری سعی بر این بود که Dimension.City را در دیتابیس WideWorldImportersDW جستجو کند ولی این اتفاق رخ نداد. ظاهرا جدول شامل یک نوع CLR است. پیغام خطا نشان می دهد که به جای آن از pass-through query استفاده کنیم:

Please use a pass-through query to access remote object '"WideWorldImportersDW"."Dimension"."City"'.

pass-through query به ما این امکان را می دهد که کوئری ها را برای جدولی که حاوی ستون های CLR است را اجرا کنیم.

SELECT TOP(10) *
FROM OPENQUERY(
Homer,
'SELECT * FROM WideWorldImportersDW.Dimension.City'
);

کوئری فوق بدون هیچ خطایی اجرا می شود. تابع OPENQUERY به ما این امکان را می دهد که تا یک pass-through query را در یک linked server اجرا کنیم. آرگومان اول linked server و دوم کوئری ای است که می خواهیم اجرا شود. بنابراین می توانید کوئری اصلی را کپی کرده و به عنوان آرگومان دوم جای گذاری کنید. در هنگام کپی، فراموش نکنید که نام linked server از کوئری که آرگومان دوم است، حذف کنید وگرنه باز هم خطا دریافت می کنید. مثلا Homer.WideWorldImportersDW.Dimension.City باید به WideWorldImportersDW.Dimension.City تبدیل شود.
همانطور که گفته شد، پیغام خطا به ما می گوید که شما در جستجوی ستون از نوع CLR هستید. با در نظر گرفتن نام جدول و دیتابیس در linked server، کوئری زیر را اجرا کنید:


USE WideWorldImportersDW;
SELECT
COLUMN_NAME,
DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'City'
AND TABLE_SCHEMA = 'Dimension';

به جای دیتابیس و جدول، با نام دیتابیس و جدول خودتان را جایگزین کنید.

+----------------------------+-------------+
| COLUMN_NAME | DATA_TYPE |
|----------------------------+-------------|
| City Key | int |
| WWI City ID | int |
| City | nvarchar |
| State Province | nvarchar |
| Country | nvarchar |
| Continent | nvarchar |
| Sales Territory | nvarchar |
| Region | nvarchar |
| Subregion | nvarchar |
| Location | geography |
| Latest Recorded Population | bigint |
| Valid From | datetime2 |
| Valid To | datetime2 |
| Lineage Key | int |
+----------------------------+-------------+

همانطور که مشاهده می کنید، ستونی با نام Location، از نوع دیتاتایپ geography است که از نوع CLR است. این محتمل ترین علت خطای Msg 7325 Objects exposing columns with CLR types are not allowed in distributed queries است.


نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز