أنا أستخدم SQL Server 2008 و Navicat. أحتاج إلى إعادة تسمية عمود في جدول باستخدام SQL.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
هذا البيان لا يعمل.
استخدم sp_rename
EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
راجع: مزود خدمة - كيفية إعادة تسمية اسم العمود أو اسم الجدول
الوثائق: sp_rename (Transact-SQL)
لقضيتك سيكون:
EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'
تذكر استخدام علامات الاقتباس المفردة لإحاطة قيمك.
بدلاً من SQL
، يمكنك القيام بذلك في Microsoft SQL Server Management Studio. فيما يلي بعض الطرق السريعة لاستخدام واجهة المستخدم الرسومية:
بطء انقر نقرا مزدوجا فوق العمود. سيصبح اسم العمود مربع نص قابل للتحرير.
انقر بزر الماوس الأيمن فوق العمود واختر "إعادة تسمية" من قائمة السياق.
فمثلا:
هذه الطريقة هي الأفضل عندما تحتاج إلى إعادة تسمية أعمدة متعددة دفعة واحدة.
فمثلا:
ملاحظة: أعرف أن OP طلب على وجه التحديد لحل SQL ، وأعتقد أن هذا قد يساعد الآخرين :)
محاولة:
EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
يجب عليك أيضًا تحديد مخطط الجدول أو قد تحصل على هذا الخطأ:
Msg 15248 ، المستوى 11 ، الحالة 1 ، الإجراء sp_rename ، السطر 238 إما أن المعلمةobjname غامضة أو أنobjtype المطالب به (COLUMN) خاطئ.
إذا كان البرنامج النصي للنشر أوصي أيضًا بإضافة بعض الأمان الإضافي إليه.
if exists (select 1 from sys.columns where name = 'OldColumnName' and object_name(object_id) = 'TableName') AND
not exists (select 1 from sys.columns where name = 'NewColumnName' and object_name(object_id) = 'TableName')
EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN';
سيكون اقتراحًا جيدًا استخدام دالة مضمنة بالفعل ، ولكن هناك طريقة أخرى لاستخدامها وهي:
الفائدة من استخدام sp_rename
هي أنها تهتم بجميع العلاقات المرتبطة به.
من الوثائق :
تقوم sp_rename تلقائيًا بإعادة تسمية الفهرس المرتبط كلما تمت إعادة تسمية قيد PRIMARY KEY أو UNIQUE. إذا كان الفهرس المعاد تسميته مرتبطًا بقيود PRIMARY KEY ، فسيتم أيضًا إعادة تسمية القيد PRIMARY KEY تلقائيًا بواسطة sp_rename. يمكن استخدام sp_rename لإعادة تسمية فهارس XML الأساسية والثانوية.
يمكنك استخدام sp_rename
لإعادة تسمية عمود.
USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
المعلمة الأولى هي الكائن المراد تعديله ، والمعلمة الثانية هي الاسم الجديد الذي سيُعطى للكائن ، والمعلمة الثالثةعمودتبلغ الخادم بأن إعادة التسمية لـ column
، و يمكن أيضًا استخدامه لإعادة تسمية tables
و index
و alias data type
.
نظرًا لأنني غالباً ما أتيت إلى هنا ثم أتساءل عن كيفية استخدام الأقواس ، قد تكون هذه الإجابة مفيدة لأولئك مثلي.
EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN';
OldColumnName
في []
. لن يعمل.NewColumnName
في []
، فسيؤدي ذلك إلى [[NewColumnName]]
.يحتوي Sql Server management studio على بعض الإجراءات المخزنة في النظام (SP)
أحدها يستخدم لإعادة تسمية عمود. SP هو sp_rename
بناء الجملة:sp_rename '[table_name] .old_column_name' ، 'new_column_name'
للحصول على مزيد من المساعدة ، راجع هذه المقالة: sp_rename بواسطة Microsoft Docs
ملاحظة:عند تنفيذ هذا SP سوف يعطيك خادم sql رسالة تحذير باسم 'تحذير: تغيير أي جزء من اسم الكائن قد ينقطع البرامج النصية والإجراءات المخزنة '. هذا أمر بالغ الأهمية فقط إذا كنت قد كتبت sp الخاصة بك والتي تتضمن العمود في الجدول الذي أنت على وشك تغييره.
نسخة محسنة من طاهر
DECLARE @SchemaName AS VARCHAR(128)
DECLARE @TableName AS VARCHAR(128)
DECLARE @OldColumnName AS VARCHAR(128)
DECLARE @NewColumnName AS VARCHAR(128)
DECLARE @ParamValue AS VARCHAR(1000)
SET @SchemaName = 'dbo'
SET @TableName = 'tableName'
SET @OldColumnName = 'OldColumnName'
SET @NewColumnName = 'NewColumnName'
SET @ParamValue = @SchemaName + '.' + @TableName + '.' + @OldColumnName
IF EXISTS
(
SELECT 1 FROM sys.columns WHERE name = @OldColumnName AND OBJECT_NAME(object_id) = @TableName
)
AND NOT EXISTS
(
SELECT 1 FROM sys.columns WHERE name = @NewColumnName AND OBJECT_NAME(object_id) = @TableName
)
BEGIN
EXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';
END
أو يمكنك فقط النقر مرتين على العمود الموجود في SQL Management Studio وإعادة تسميته عبر واجهة المستخدم ...