به زود وب خوش آمدید

نحوه تغییر schema جداول و Store Procedures در MSSQL

مدیر سایت مدیر سایت
۱۹ تیر ۱۳۹۹
۰
730
نحوه تغییر schema جداول و Store Procedures در MSSQL
گاها نیاز می شود Owner یک و یا کلیه schema ها ، یا جداول تغییر پیدا کند و یا در نظر دارید User فعلی دیتابیس را حذف نمائید ولی با خطا مواجه می گردید.برای این منظور می بایست owner کلیه جداول و یا schema ها به dbo تغییر یابد.در ذیل به سه روش اشاره شده است.

جهت اطلاع از نحوه تغییر schema و یا جداول دیتابیس مراحل ذیل را دنبال نمائید:

۱. در ابتدا می بایست برنامه Microsoft SQL Server Management Studio را در سیستم خود نصب کرده و سپس به دیتابیس کانکت شوید.پس از انتخاب نام دیتابیس بر روی گزینه “Query” جهت قرار دادن کد کلیک نمائید.

 

۲. حال می بایست کد ذیل را در قسمتی که در تصویر نمایش داده شده است قرار داده و سپس جهت اجرای کوئری می بایست بر روی گزینه “Execute” کلیک نمائید.لازم به ذکر است به جای “oldschema” می بایست نام یوزری که وجود دارد را قرار دهید.

SELECT 'ALTER SCHEMA dbo TRANSFER ' + s.Name + '.' + o.Name
FROM sys.Objects o
INNER JOIN sys.Schemas s on o.schema_id = s.schema_id
WHERE s.Name = 'oldschema'
And (o.Type = 'U' Or o.Type = 'P' Or o.Type = 'V')

۳. حال می بایست خروجی که پس از اجرا در مرحله ابتدایی به شما داد را کپی و سپس مجدد در قسمت اجرای کوئری paste نموده و مجدد بر روی “Execute” کلیک نمائید.

کد ذیل مثال می باشد و خروجی که به شما می دهد متفاوت خواهد بود.
    ALTER SCHEMA dbo TRANSFER yourschema.Table1
    ALTER SCHEMA dbo TRANSFER yourschema.Table2
    ALTER SCHEMA dbo TRANSFER yourschema.Table3
    ALTER SCHEMA dbo TRANSFER yourschema.Table4
    ALTER SCHEMA dbo TRANSFER yourschema.Table5
    ALTER SCHEMA dbo TRANSFER yourschema.Table6

۴. در صورتی که با کد مرحله ابتدایی نتوانستید یوزر دیتابیس را حذف و یا Owner جداول تغییر پیدا نکرد،از کد ذیل استفاده نمائید.پس از کپی کردن در قسمت مربوطه مجدد به مانند قبل بر روی گزینه “Execute” کلیک نمائید.

IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[ChangeAllObjectOwnersToDBO]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)

DROP procedure [dbo].[ChangeAllObjectOwnersToDBO]

GO

SET QUOTED_IDENTIFIER OFF    SET ANSI_NULLS  ON

GO

 

CREATE proc ChangeAllObjectOwnersToDBO

AS

SET nocount ON

 

declare @uid int

declare @objName varchar(50)

declare @userName varchar(50)

declare @currObjName varchar(50)

declare @outStr varchar(256)

SET @uid = user_id('dbo')

 

declare chObjOwnerCur cursor static

FOR

SELECT user_name(uid) AS 'username', [name] AS 'name' FROM sysobjects WHERE uid <> @uid

 

open chObjOwnerCur

IF @@cursor_rows = 0

begin

  print 'All objects are already owned by dbo!'

  close chObjOwnerCur

  deallocate chObjOwnerCur

  RETURN 1

end

 

fetch next FROM chObjOwnerCur INTO @userName, @objName

while @@fetch_status = 0

begin

  SET @currObjName = 'dbo.' + @objName

  IF (object_id(@currObjName) > 0)

    print 'WARNING *** ' + @currObjName + ' already exists ***'

  SET @outStr = 'sp_changeobjectowner "' + @userName + '.' + @objName + '", "dbo"'

  print @outStr

  print 'go'

  fetch next FROM chObjOwnerCur INTO @userName, @objName

end

 

close chObjOwnerCur

deallocate chObjOwnerCur

SET nocount off

RETURN 0

 

GO

SET QUOTED_IDENTIFIER OFF    SET ANSI_NULLS  ON

GO

۵. در صورتی که تمامی مراحل بالا را طی نمودید ولی یک جدول و یا یک schema تغییر owner نداشت می توانید از کد ذیل استفاده نمائید.
به جای“current_owner”می بایست نام Owner فعلی که قصد تغییر آن را دارید را وارد کرده و در قسمت “tablename” کافی نام جدولی که در نظر است را قرار دهید.پس از آن بر روی گزینه “Execute” مجدد کلیک نمائید.

ALTER SCHEMA dbo TRANSFER [current_owner].tablename;

 

برچسب‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *