نمایش نتایج 1 تا 4 از 4

نام تاپیک: کپی یک Object از یک DB به DB دیگر با TSQL ؟

  1. #1
    کاربر دائمی آواتار Modifier
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    اصفهان دیار شیخ بهایی
    سن
    39
    پست
    611

    Question کپی یک Object از یک DB به DB دیگر با TSQL ؟

    سلام

    میخوام یه Object مثل View,Table,StorProcedure یا... رو از یک DB بفرستم توی یک DB دیگه...
    شاید بهتره بگم همون Import....

    چطور این کا رو انجام بدم با TSQL ؟

    ممنون.
    یاعلی.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    تهران
    سن
    47
    پست
    182

    نقل قول: کپی یک Object از یک DB به DB دیگر با TSQL ؟

    فکر نمی کنم چیزی (مثلاً دستوری در T-SQL) تحت عنوان کپی برای این کار وجود داشته باشه، برای این کار بهتره از ابزارهای آماده مثل Database Publishing Waizard استفاده کنید که البته در SQL Server 2008 به طور آماده وجود داره. چون اگه نخواین از ابزارهای آماده استفاده کنین باید خودتون اسکریپت لازم برای این کار رو بنویسید که برای این کار هم حتماً باید از Dynamic SQL استفاده کنید و این کار هم بسیار بسیار مفصله و در واقع خودتون با این کار دارید یه Database Publishing Wizard می نویسید!

    به عنوان مثال لیست تمام اشیاء دیتابیس در sys.objects ثبت شده، لیست تمام فیلد جداول در sys.columns، لیست تمام پارامترهای توابع و رویه های ذخیره شده در sys.parameters، لیست تمام تریگرها در sys.triggers و ... نوشتن اسکپریتی که بتونه اسکریپت لازم برای ایجاد همه اشیاء رو تولید کنه تا بعد اونو در دیتابیس مقصد اجرا کنین، صرفنظر از ملاحظات دسترسی و در نظر گرفتن شرایط مختلف (مثلاً این که اگه یک شیء از قبل در دیتابیس مقصد وجود داشت چی کار باید بکنید)، اعطای دسترسی ها، ایجاد کلیدهای اصلی و خارجی، ایجاد ایندکس ها، ایجاد قیود و غیره و غیره، همه اینها کار بسیار بسیار مفصلیه!

    لذا به هیچ وجه بهتون توصیه نمی کنم خودتون بخواید این کار رو انجام بدید و اصولاً هم به نظرم دلیلی برای این کار وجود نداره. چون مگه چند بار چنین چیزی پیش میاد؟ چون آدم باید وقت و انرژی و هزینه اش رو به تناسب و مناسبت خرج کنه و منطقی نیست که به خاطر یه کاری که ممکنه چند سال یک بار پیش بیاد، بیاید مثلاً 6 ماه وقت بذارید که ابزاری رو درست کنید که تازه از قبل هم وجود داره.

    حالا خود دانید.

    اما این که چطور می شه سورس مثلاً یه رویه ذخیره شده رو توسط T-SQL به دست آورد برای خودم جالب بود و محض کنجکاوی یه Search کردم ببینم چطور می شه این کار رو کرد. چون به هر حال خود ابزارهای از قبل آماده به یه نحوی باید این کار رو انجام بدن دیگه! با کمی جستجو به همچین چیزی رسیدم:


    select sp.name as sproc,m.definition as sproc_source
    from sys.sql_modules m inner join sys.objects sp
    on m.object_id = sp.object_id
    where sp.type = 'p'


    این اسکریپت سورس رویه های ذخیره شده رو هم می ده. قطعاً ابزاری مثل Database Publishing Wizard از چنین روشی استفاده می کنه. البته توجه کنین فقط سورس رویه های ذخیره شده رمز نشده رو می تونین با این کار به دست بیارید. سورس رویه هایی که با with encryption رمز شدن رو دیگه نمی تونین با T-SQL از این طریق به دست بیارید. ولی اگه جایی گیر کردین، برای اون کار هم ابزارهایی هست که می تونه حتی سورس رویه ذخیره شده رمز شده رو هم بهتون بده.

  3. #3
    کاربر دائمی آواتار Modifier
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    اصفهان دیار شیخ بهایی
    سن
    39
    پست
    611

    نقل قول: کپی یک Object از یک DB به DB دیگر با TSQL ؟

    با استفاده از دستور زیر:
    select sp.name as sproc,m.definition as sproc_source
    from sys.sql_modules m inner join sys.objects sp
    on m.object_id = sp.object_id
    where sp.type = 'p'


    با تغییر شرطش میشود Source ، همه Object ها رو به غیر از Table گرفت ..
    Source مربوط به Table ها رو چطور میشه بدست آورد ؟

    ممنون.
    یاعلی

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    تهران
    سن
    47
    پست
    182

    نقل قول: کپی یک Object از یک DB به DB دیگر با TSQL ؟

    سورس جدول رو نمی تونید مستقیماً به دست بیارید. باید خودتون اسکریپتش رو بر اساس اطلاعات کل جدول و فیلدهاش که از جداول sys.tables و sys.columns و sys.foreign_keys و ... به دست میاد ایجاد کنید و این می شه دقیقاً نوشتن یه ابزار Database Publishing Wizard.

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •