راهنمای جامع: تغییر نام و مالکیت اشیاء پایگاه داده SQL Server به روشهای اصولی
پایگاه داده SQL Server شامل اشیاء متعددی است که هسته اصلی ساختار آن را تشکیل میدهند. در طول زمان، ممکن است نیاز به تغییر نام یا تغییر مالکیت این اشیاء باشد. در این مقاله جامع، به بررسی دقیق نحوه تغییر نام اشیاء پایگاه داده SQL Server و همچنین چگونگی تغییر مالکیت اشیاء SQL Server خواهیم پرداخت.
عملیات تغییر نام اشیاء پایگاه داده معمولاً با استفاده از رویه ذخیره شده sp_rename
انجام میشود. سینتکس این رویه ذخیره شده بسته به نوع شیئی که قصد تغییر نام آن را دارید، کمی متفاوت است. ما در اینجا به تفصیل نحوه تغییر نام جداول، ستونها، ایندکسها، رویههای ذخیره شده، نماها (Views)، توابع، تریگرها، کلیدهای اصلی (Primary Keys)، کلیدهای خارجی (Foreign Keys)، محدودیتهای پیشفرض (Default Constraints) و محدودیتهای اعتبارسنجی (Check Constraints) را پوشش خواهیم داد.
تغییر نام جداول در SQL Server
برای تغییر نام یک جدول در SQL Server، سینتکس به شرح زیر است:
sp_rename ‘TableName’, ‘NewTableName’
برای درک بهتر، یک مثال را بررسی میکنیم. ابتدا یک جدول ایجاد میکنیم:
USE tempdb;
GO
CREATE TABLE TestRename (col1 INT, col2 VARCHAR(20));
GO
برای تغییر نام این جدول از TestRename به TestRenameNew، دستور زیر را اجرا میکنیم:
EXEC sp_rename 'TestRename', 'TestRenameNew';
GO
تغییر نام ستونها در SQL Server
برای تغییر نام یک ستون در SQL Server، سینتکس به شرح زیر است. توجه داشته باشید که پارامتر سوم ‘COLUMN’ است:
sp_rename ‘TableName.ColumnName’, ‘NewColumnName’, ‘COLUMN’
یک مثال را بررسی میکنیم. ابتدا یک جدول ایجاد میکنیم:
USE tempdb;
GO
CREATE TABLE TestRenameColumns (col1 INT, col2 VARCHAR(20));
GO
برای تغییر نام ستون “col2” به “newcol2″، دستور زیر را اجرا میکنیم:
EXEC sp_rename 'TestRenameColumns.col2', 'newcol2', 'COLUMN';
GO
تغییر نام ایندکسها در SQL Server
برای تغییر نام یک ایندکس در SQL Server، سینتکس به شرح زیر است. توجه داشته باشید که پارامتر سوم ‘INDEX’ است:
sp_rename ‘TableName.IndexName’, ‘NewIndexName’, ‘INDEX’
یک مثال را بررسی میکنیم. ابتدا یک جدول و یک ایندکس ایجاد میکنیم:
USE tempdb;
GO
CREATE TABLE TestRenameIndexes (col1 INT, col2 VARCHAR(20));
CREATE INDEX IX_TestRenameIndexes ON TestRenameIndexes (col2);
GO
برای تغییر نام ایندکس “IX_TestRenameIndexes” به “IX_TestRenameIndexesNew”، دستور زیر را اجرا میکنیم:
EXEC sp_rename 'TestRenameIndexes.IX_TestRenameIndexes', 'IX_TestRenameIndexesNew', 'INDEX';
GO
تغییر نام رویههای ذخیره شده، نماها، توابع و تریگرها در SQL Server
برای تغییر نام رویههای ذخیره شده (Stored Procedures)، نماها (Views)، توابع (Functions) و تریگرها (Triggers)، سینتکس به شرح زیر است. توجه داشته باشید که پارامتر سوم ‘OBJECT’ است:
sp_rename ‘ObjectName’, ‘NewObjectName’, ‘OBJECT’
یک مثال را بررسی میکنیم. ابتدا یک رویه ذخیره شده ایجاد میکنیم:
USE tempdb;
GO
CREATE PROCEDURE TestRenameSP AS SELECT GETDATE() AS CurrentDate;
GO
برای تغییر نام این رویه ذخیره شده از “TestRenameSP” به “TestRenameSPNew”، دستور زیر را اجرا میکنیم:
EXEC sp_rename 'TestRenameSP', 'TestRenameSPNew', 'OBJECT';
GO
لازم به ذکر است که تغییر نام رویههای ذخیره شده، نماها، توابع و تریگرها، هیچ شیء دیگری را که به این اشیاء ارجاع میدهند، بهروزرسانی نخواهد کرد. باید اطمینان حاصل کنید که تمام ارجاعات را پیدا کرده و آنها را نیز بهروزرسانی کنید.
تغییر نام کلیدهای اصلی، خارجی و محدودیتها در SQL Server
برای تغییر نام کلیدهای اصلی (Primary Keys)، کلیدهای خارجی (Foreign Keys)، محدودیتهای پیشفرض (Default Constraints) و محدودیتهای اعتبارسنجی (Check Constraints)، سینتکس به شرح زیر است. توجه داشته باشید که پارامتر سوم ‘OBJECT’ است:
sp_rename ‘ConstraintName’, ‘NewConstraintName’, ‘OBJECT’
یک مثال را بررسی میکنیم. ابتدا یک جدول با کلید اصلی، کلید خارجی، محدودیت پیشفرض و محدودیت اعتبارسنجی ایجاد میکنیم:
USE tempdb;
GO
CREATE TABLE TestRenameConstraintsPK (col1 INT PRIMARY KEY);
CREATE TABLE TestRenameConstraintsFK (col1 INT, col2 INT);
ALTER TABLE TestRenameConstraintsFK ADD CONSTRAINT FK_TestRenameConstraintsFK FOREIGN KEY (col1) REFERENCES TestRenameConstraintsPK (col1);
ALTER TABLE TestRenameConstraintsFK ADD CONSTRAINT DF_TestRenameConstraintsFK DEFAULT (0) FOR col2;
ALTER TABLE TestRenameConstraintsFK ADD CONSTRAINT CK_TestRenameConstraintsFK CHECK (col2 > 0);
GO
برای تغییر نام کلید اصلی “PK__TestRena__F5E48566270E63AA” برای جدول TestRenameConstraintsPK به “PK_TestRenameConstraintsPK_New”، دستور زیر را اجرا میکنیم. نام “PK__TestRena__F5E48566270E63AA” توسط سیستم تولید شده است. میتوانید این نامها را با اجرای sp_help ‘TestRenameConstraintsPK’ و بررسی ستونهای index_name و constraint_name به دست آورید.
EXEC sp_rename 'PK__TestRena__F5E48566270E63AA', 'PK_TestRenameConstraintsPK_New', 'OBJECT';
GO
برای تغییر نام کلید خارجی “FK_TestRenameConstraintsFK” به “FK_TestRenameConstraintsFK_New”، دستور زیر را اجرا میکنیم:
EXEC sp_rename 'FK_TestRenameConstraintsFK', 'FK_TestRenameConstraintsFK_New', 'OBJECT';
GO
برای تغییر نام محدودیت پیشفرض “DF_TestRenameConstraintsFK” به “DF_TestRenameConstraintsFK_New”، دستور زیر را اجرا میکنیم:
EXEC sp_rename 'DF_TestRenameConstraintsFK', 'DF_TestRenameConstraintsFK_New', 'OBJECT';
GO
برای تغییر نام محدودیت اعتبارسنجی “CK_TestRenameConstraintsFK” به “CK_TestRenameConstraintsFK_New”، دستور زیر را اجرا میکنیم:
EXEC sp_rename 'CK_TestRenameConstraintsFK', 'CK_TestRenameConstraintsFK_New', 'OBJECT';
GO
تغییر نام کاربران و لاگینها در SQL Server
رویه ذخیره شده sp_rename
برای تغییر نام کاربران (Users) یا لاگینها (Logins) استفاده نمیشود.
برای تغییر نام یک لاگین در SQL Server، میتوانید از دستور ALTER LOGIN به شکل زیر استفاده کنید:
ALTER LOGIN OldLoginName WITH NAME = NewLoginName
یک مثال را بررسی میکنیم. ابتدا یک لاگین ایجاد میکنیم:
USE master;
GO
CREATE LOGIN TestRenameLogin WITH PASSWORD = 'password', CHECK_POLICY = OFF;
GO
برای تغییر نام این لاگین از “TestRenameLogin” به “TestRenameLoginNew”، دستور زیر را اجرا میکنیم:
ALTER LOGIN TestRenameLogin WITH NAME = TestRenameLoginNew;
GO
برای تغییر نام یک کاربر در SQL Server، میتوانید از دستور ALTER USER به شکل زیر استفاده کنید:
ALTER USER OldUserName WITH NAME = NewUserName
یک مثال را بررسی میکنیم. ابتدا یک کاربر ایجاد میکنیم:
USE tempdb;
GO
CREATE USER TestRenameUser FOR LOGIN TestRenameLoginNew;
GO
برای تغییر نام این کاربر از “TestRenameUser” به “TestRenameUserNew”، دستور زیر را اجرا میکنیم:
ALTER USER TestRenameUser WITH NAME = TestRenameUserNew;
GO
تغییر مالکیت اشیاء پایگاه داده SQL Server
دو روش اصلی برای تغییر مالکیت اشیاء پایگاه داده با استفاده از دستورات ALTER SCHEMA و ALTER AUTHORIZATION وجود دارد.
استفاده از ALTER SCHEMA
دستور ALTER SCHEMA میتواند برای انتقال اشیاء ایمنسازی شده (securables) از یک شمای (schema) به شمای دیگر استفاده شود. سینتکس به شرح زیر است:
ALTER SCHEMA TargetSchemaName TRANSFER ObjectName
یک مثال را بررسی میکنیم. ابتدا یک جدول ایجاد میکنیم:
USE tempdb;
GO
CREATE SCHEMA SchemaA;
GO
CREATE TABLE SchemaA.TestChangeOwner (col1 INT);
GO
برای انتقال این جدول از شمای “SchemaA” به شمای “dbo”، دستور زیر را اجرا میکنیم. توجه داشته باشید که اگر شیء در حال حاضر در شمایی نباشد، به طور پیشفرض در شمای “dbo” خواهد بود؛ بنابراین، اگر میخواهید آن را از “dbo” به شمای دیگری منتقل کنید، کافیست همین دستور را اجرا کنید.
ALTER SCHEMA dbo TRANSFER SchemaA.TestChangeOwner;
GO
استفاده از ALTER AUTHORIZATION
دستور ALTER AUTHORIZATION میتواند برای تغییر مالکیت یک شیء استفاده شود. سینتکس به شرح زیر است:
ALTER AUTHORIZATION ON ObjectName TO NewOwner
یک مثال را بررسی میکنیم. ابتدا یک جدول ایجاد میکنیم:
USE tempdb;
GO
CREATE USER TestChangeOwnerUser WITHOUT LOGIN;
CREATE TABLE TestChangeOwner (col1 INT);
GO
برای تغییر مالکیت جدول “TestChangeOwner” از “dbo” به “TestChangeOwnerUser”، دستور زیر را اجرا میکنیم:
ALTER AUTHORIZATION ON TestChangeOwner TO TestChangeOwnerUser;
GO
“`