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

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

مدیر سایت مدیر سایت
۱۹ تیر ۱۳۹۹
۰
6661
نحوه تغییر schema جداول و Store Procedures در MSSQL

یک دیتابیس SQL شامل چندین objects مانند جداول ، views، stored procedures ، توابع ، ایندکس ها ، trigger ها است. ما SQL Schema را به عنوان یک مجموعه منطقی از اشیا database تعریف می کنیم.هر شیء و جدولی که در این دیتابیس قرار داشته باشد، به یکی از این schemaها تعلق دارد.اسکیما در sql مکانیسم مفید برای تفکیک اشیا دیتابیس برای برنامه های مختلف و مدیریت سطح دسترسی کاربران بر روی Object های قرار گرفته در آن Schema می باشد.

در صورتی که کاربر دسترسی ایجاد اشیاء جدید را داشته باشد، این اشیاء به schemaی پیش فرض آن کاربر تعلق خواهند گرفت مگر اینکه اسکیمای دیگری برای آن تعریف کرده باشیم. بنابراین برای دسترسی به اشیای بیرونیِ schema پیش فرض، باید نام آن schema را مورد استفاده قرار دهیم.

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

جهت استفاد از MSSQL 2019 در ابتدا می بایست پس از ثبت دامنه، خرید هاست را در شرکت زود وب انجام دهید تا به دیتابیس دسترسی داشته باشید.

 

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

روش اول

۱. جهت وصل شدن به دیتابیس می بایست در ابتدا برنامه Microsoft SQL Server Management Studio را در سیستم خود نصب نمائید.پس از نصب و اجرای برنامه با داشتن اطلاعات مربوط به دیتابیس می توانید به سرور متصل شوید.

جهت ایجاد دیتابیس MSSQL در هاست ویندوز  لطفا به مقاله ایجاد دیتابیس در SolidCP هاست ویندوز مراجعه نمائید.

 

– Server type : می بایست بر روی گزینه Database Engine قرار دهید.
– Server name : آدرس IP سرور دیتابیس را می بایست وارد کنید.
– Authentication : از این قسمت گزینه SQL Server Authentication را انتخاب کنید.
– Logins : یوزر دیتابیس را می بایست در این قسمت قرار دهید.
– Password : پسورد دیتابیس مورد نظر را وارد نمائید.
– connect : در انتها جهت وصل شدن به دیتابیس بر روی این گزینه کلیک نمائید.


توجه :
اگر دیتابیسی را که مدنظر دارید schema جداول و Store Procedures در MSSQL را تغییر دهید و در لوکال خودتان قرار دارد. فقط کافی است در قسمت  “Server name” می توانید “localhost” قرار دهید و در قسمت “Authentication” گزینه “Windows Authentication” را انتخاب نمائید.

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

۲. پس از اتصال به دیتابیس و انتخاب دیتابیس مورد نظر می بایست طبق تصویر بر روی گزینه “Query” کلیک نمائید.

تغییر schema در MSSQL

۳. در این قسمت کد ذیل که مربوط به تغییر schema می باشد را در کادر مشخص شده قرار داده و سپس جهت اجرای کوئری بر روی گزینه “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')

آموزش تغییر schema جداول و Store Procedures در MSSQL

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


خروجی که به شما می دهد ممکن است با مثالی که در اینجا ذکر شده است متفاوت باشد.

راهنمای تغییر schema و Store Procedures در MSSQL در ویندوز

روش دوم

۵. در صورتی که از روش اول نتیجه نگرفتید و Owner و یا همان schema جداول تغییر پیدا نکرد می توانید با قرار دادن کد ذیل به مانند قبل در قسمت کوئری و سپس کلیک بر روی گزینه “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 جداول را به صورت تکی تغییر دهید.
به جای“current_owner” نام Owner فعلی که قصد تغییر آن را دارید را وارد نمائید و در قسمت “tablename” نام جدولی که در نظر است را قرار دهید.در انتها بر روی گزینه “Execute” مجدد کلیک نمائید.

ALTER SCHEMA dbo TRANSFER [current_owner].tablename;

برچسب‌ها

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

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