كار كردن با نوع Xml در linked server

هنگام كار كردن با Linked Server اگر جدول شما شامل ستوني از جنس Xml باشه كوئري زير

SELECT
    T.ID ,
    T.Name
FROM
    [10.0.1.3].RemoteDatabase.[dbo].[Tbl_Person_Remote] AS T
    INNER JOIN LocalDatabase.[dbo].[Tbl_Person_Local]
        ON T.ID = LocalDatabase.[dbo].[Tbl_Person_Local].ID
باعث خطاي زير ميشه

Xml data type is not supported in distributed queries.

براي رفع اين مشكل 2 راه  وجود داره

 1-ساختن يك View در سرور ريموت كه شامل اون ستون Xml نباشه

 2-استفاده از تابع OPENQUERY

SELECT
    T.ID ,
    T.NAME
FROM
    OPENQUERY([10.0.1.3] , 'SELECT    T.ID ,T.Name FROM RemoteDatabase.[dbo].[Tbl_Person_Remote]') AS T
    INNER JOIN LocalDatabase.[dbo].[Tbl_Person_Local]
        ON T.ID = LocalDatabase.[dbo].[Tbl_Person_Local].ID   

توجه كنيد من تو Select ام اون ستوني رو كه از جنس Xml هست ندارم در صورت نياز بايد اون ستون رو Cast يا Convert كنيد به NVARCHAR(max)

مشكل ديگه اي كه ممكنه تو كوئري هاي از اين دست به اون بر بخوريد (Distributed Queries)  يكي نبودن و يا تداخل Collations هاي سرور ريموت و لوكاله

Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "SQL_Latin1_General_CP1256_CI_AS" in the equal to operation.

براي رفع اون داخل Select مون به صورت صريح Collation رو مشخص ميكنيم با دستور COLLATE

نظرات

  1. سلام
    این کار شما مشکل select گرفتن از سرور remote رو حل میکنه
    حال فرض کن می خوایم روی جدول تغییر بدیم.مثلا یک رکورد درج کنیم
    اینجارو می خوای چیکار کنید؟
    ستون xml داخل view رو که حذف کردی
    اگرم بیاریش مجبوری به nvarchar(max) کانورتش کنی
    حالا درج یک روکورد تو سرور remote روی یک جدولی که ستون xml داره و می خوای پرش کنی چی میشه؟
    ممنون میشم اگه راهنمای کنید
    shabani_salar@yahoo.com

    پاسخحذف

ارسال یک نظر

پست‌های معروف از این وبلاگ

مقدمه ای بر RavenDB – قسمت دوم

مقدمه ای بر RavenDB – قسمت سوم

lnav ابزاری بسیار کاربردی برای پیمایش لاگ ها در لینوکس و البته مک