آژانس هواپیماییexchanging

آموزش : تغییر owner همه جداول

شروع موضوع توسط amin_lili ‏6 ژانویه 2008 در انجمن SQL Server

  1. amin_lili

    amin_lili کاربر تازه وارد

    تاریخ عضویت:
    ‏24 آپریل 2007
    نوشته ها:
    528
    تشکر شده:
    2
    محل سکونت:
    ای کاش آنجا ...
    سلام دوستان .
    مواقع بسیاری پیش میاد که لازم هست owner یک جدول رو تغییر دهیم .
    فرض کنید جدولی با نام tblUsers در دیتابیس با dbo owner ایجاد شده . شما می خواهید owner آن را از dbo به مثلا myowner تغییر دهید . برای این کار می توانیم از Stored Procedure ی که در دیتابیس master موجود است استفاده کنیم :
    کد:
    exec sp_changeobjectowner 'TableName','new owner'
    مثال: exec sp_changeobjectowner 'tblUsers','myowner'
    
    اما فرض کنید در دیتابیس نزدیک به 100 جدول وجود دارد که لازم است owner همگی تغییر کند . مطمئنا اجرای کد بالا برای هر جدول کار طاقت فرسایی هست .
    لذا برای این کار می توانیم از کد زیر استفاده کنیم .

    ابتدا یک متغیر از نوع sysname تعریف می کنیم . سپس یک cursor تعریف می کنیم تا بتوانیم سطر به سطر از جدول sysobjects بخوانیم . حال با بررسی کردن این شرط که owner جداول dbo باشند کد فوق را برای آن جدول اجرا می کنیم .و در نهایت cursor تعریف شده را deallocate می کنیم.

    کد:
    DECLARE @tbl sysname
    DECLARE tblcur INSENSITIVE CURSOR FOR
    SELECT name FROM sysobjects
    WHERE xtype = 'U' AND uid = user_id('dbo')
    OPEN tblcur
    WHILE 1 = 1
    BEGIN
    FETCH tblcur INTO @tbl
    IF @@fetch_status <0
    BREAK
    
    EXEC sp_changeobjectowner @tbl, 'myowner'
    END
    DEALLOCATE tblcur
    
    
    بدین ترتیب owner همه جداول تغییر می کنند.
    امیدوارم این مطلب مفید باشه و مورد استفاده شما قرار بگیره.
     
    najafzadeh از این نوشته تشکر کرده است.