SQL Server 2008 sütununu yeniden adlandır


653

SQL Server 2008 ve Navicat kullanıyorum. SQL kullanarak bir tablodaki bir sütunu yeniden adlandırmak gerekiyor.

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

Bu ifade işe yaramıyor.



5
Bunun, swetha ile bağlantılı olan # 174582 numaralı sorunun tam bir kopyası olmadığını unutmayın: Bu, MS SQL'e özgüdür, veritabanına agnostiktir.

Yanıtlar:


1195

kullanım sp_rename

EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'

Bkz: SQL SERVER - Bir Sütun Adı veya Tablo Adı Nasıl Yeniden Adlandırılır

Belgeler: sp_rename (Transact-SQL)

Sizin durumunuz için:

EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'

Değerlerinizi içine almak için tek tırnak işareti kullanmayı unutmayın.


24
SQL Server yeni sütunun adı olarak [[[NewColumnName]]] kullanacağından NewColumnName köşeli parantez içine koymamalısınız. Ayrıca sp_rename, EXEC veya EXECUTE ile başlamalıdır.
Mark Freeman

29
Köşeyi tanımlayan, ancak ikinci parametreye girmeyen ilk parametreye parantez koymanıza izin verilir ve teşvik edilirsiniz. EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
Şunun

2
Bu saklı yordam kolları varsayılan değerler null vb senin cevap belirtmeliyiz contraints bir ova aksine, yeniden adlandırma yaparken alter tablebu tür kısıtlamalar varsa BAŞARISIZ edecektir.
Tuncay Göncüoğlu

4
'Table_name.new_name' kullanırsanız, bunun [şema] haline geldiğini unutmayın. [Table_name]. [Table_name.new_name] - bu tablo adını yeni ada koymayın! (bu cevapta doğrudur, sadece gözetleme için bir not ekler)
Mark Schultheiss

1
Veritabanında bir şema varsa, şema adını tablo adının önüne koymanız gerekir: EXEC sp_RENAME 'schema_name.table_name.old_name', 'new_name', 'COLUMN'
amin

106

Alternatif olarak SQL, bunu Microsoft SQL Server Management Studio'da da yapabilirsiniz. GUI'yi kullanmanın birkaç hızlı yolu:

Birinci Yol

Sütuna yavaş çift tıklayın. Sütun adı düzenlenebilir bir metin kutusu haline gelecektir.


İkinci Yol

Sütuna sağ tıklayın ve içerik menüsünden Yeniden Adlandır'ı seçin.

Örneğin:

Sütun adını yeniden adlandırmak için


Üçüncü Yol

Bu şekilde, tek seferde birden çok sütunu yeniden adlandırmanız gerektiğinde tercih edilir.

  1. Yeniden adlandırılması gereken sütunu içeren tabloya sağ tıklayın.
  2. Tasarım'ı tıklayın .
  3. Tablo tasarım panelinde, değiştirmek istediğiniz sütun adının metin kutusunu tıklatın ve düzenleyin.

Örneğin: MSSMS Tablo Tasarım Örneği

NOT: OP'nin özellikle SQL çözümü istediğini biliyorum, bunun başkalarına yardımcı olabileceğini düşündüm :)


1
Veya kullanıcının ayrıcalıkları yok.
Carrie Kendall

6
Bunu asla yapma. Tabloyu kopyalayıp eskisini bırakıp yeniden adlandırıyorsunuz. ASLA tablo hakkında her şeyi değiştirmek için GUI EVER'i kullanmayın.
HLGEM

6
@HLGEM bu oldukça büyük bir battaniye ifadesi. Her durumda, açıkladığınıza kaynak sağlayabilir misiniz? yani masayı düşürmek vs.
Carrie Kendall

2
@CarrieKendall, bunu yapmak yerine GUI'deki değişikliği komut dosyası haline getirin ve göreceksiniz. GUI kullanarak büyük bir tabloya değişiklik yapmak sp_rename veya alter table kullanmaktan çok daha yavaş olmasının nedeni budur. Ayrıca, veritabanı yapısındaki değişiklikler kod değişiklikleri ve diğer kodlar gibi kaynak kontrolünde olmalıdır, bu yüzden bir komut dosyasında olmalıdır. Bu özellikle dev üretim veritabanı haklarının tabloları değiştirmesine izin vermiyorsanız, her durumda komut dosyasına ihtiyacınız olacağı için özellikle önemlidir. Ve prod üzerinde milyonlarca kayıt içeren tabloları kopyalamak, bırakmak ve yeniden oluşturmak istemezsiniz.
HLGEM

18
Profiler çalışırken Management Studio'yu kullanarak bir SQL Server 2012 tablosunu yeniden adlandırdım ve sp_rename kullandı. Ancak önceki sürümleri için konuşamıyor.
Steve Dowling

58

Deneyin:

EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'

27

Tablonun şemasını da belirtmelisiniz yoksa bu hatayı alabilirsiniz:

Msg 15248, Düzey 11, Durum 1, Yordam sp_rename, Satır 238 @objname parametresi belirsiz veya talep edilen @objtype (COLUMN) yanlış.

Bir dağıtım komut dosyasıysa, buna ek güvenlik eklemenizi de öneririm.

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';

Bu güvenli yaklaşımı seviyorum, farklı ortamlarda çalışabilecek / olmayabilecek göçler yazmak için iyi.
Adil H. Raza

Varlık kontrolü gibi, diğer komut dizilerinin bir parçası olarak beni yeniden hissettiriyor
bilinmeyen

19

Zaten yerleşik bir işlevi kullanmak iyi bir öneri olacaktır, ancak başka bir yol da:

  1. Aynı veri türüne ve YENİ İSİM'ye sahip yeni bir sütun oluşturun.
  2. Tüm verileri yeni sütuna kopyalamak için bir UPDATE / INSERT ifadesi çalıştırın.
  3. Eski sütunu bırakın.

Bunu kullanmanın yararı sp_rename, onunla ilişkili tüm ilişkileri halletmesidir.

Gönderen belgeler :

Bir PRIMARY KEY veya UNIQUE kısıtlaması her yeniden adlandırıldığında, sp_rename ilişkili dizini otomatik olarak yeniden adlandırır. Yeniden adlandırılmış bir dizin bir PRIMARY KEY kısıtlamasına bağlıysa, PRIMARY KEY kısıtlaması da sp_rename tarafından otomatik olarak yeniden adlandırılır. sp_rename, birincil ve ikincil XML dizinlerini yeniden adlandırmak için kullanılabilir.


* 1. adımda yeni sütunda NULL değerine izin
verilmelidir

16

sp_renameBir sütunu yeniden adlandırmak için kullanabilirsiniz .

USE YourDatabase;  
GO  
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';  
GO  

İlk parametre modifiye edilmesi amacı, ikinci parametre nesnesine verilecektir yeni bir isim ve üçüncü parametre KOLON bildirir adlandırma için sunucu column, ve aynı zamanda yeniden adlandırmak için kullanılabilir tables, indexve alias data type.


2
Anlamıyorum, neden sp_rename hakkında 5 söz 4 üzerinden bile yeni cevap eklemek ...?
Pawel Czapski

3
Bir noktada, birisi parametrenin çalışmasını burada açıklamak zorunda kalacak, kimse bunu yapmadı
Alexandre Neukirchen

1
Evet, aslında haklısın, benim için çok açık ama yeni arkadaşlar için olmayabilir.
Pawel Czapski

12

Buraya sık sık geldiğim ve daha sonra köşeli parantezleri nasıl kullanacağımı merak ettiğim için, bu cevap benim gibi olanlar için yararlı olabilir.

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • OldColumnNameOlmamalıdır []. Çalışmayacak.
  • Koymayın NewColumnNameiçine [], o içine sonuçlanacaktır [[NewColumnName]].

3

Sql Server yönetim stüdyosu,
biri sütunu yeniden adlandırmak için kullanılan bazı sistem tanımlı Saklı Yordamlar (SP) vardır . SP sp_rename

Sözdizimi: sp_rename '[table_name] .old_column_name', 'new_column_name'
Daha fazla yardım için bu makaleye bakın: Microsoft Docs tarafından sp_rename

Not: Bu SP'nin yürütülmesi sırasında sql sunucusu size ' Dikkat: Bir nesne adının herhangi bir parçasını değiştirmek komut dosyalarını ve saklı yordamları bozabilir ' şeklinde bir uyarı mesajı verecektir.Bu, yalnızca sütunu içeren kendi sp'nizi yazdıysanız önemlidir. Tabloda değiştirmek üzeresiniz.


2

@Taher'ın geliştirilmiş sürümü

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

0

Veya SQL Management Studio'daki sütuna iki kez yavaş tıklayabilir ve kullanıcı arayüzünden yeniden adlandırabilirsiniz ...


-1

Sorguyu Çalıştır:

    SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'

Lütfen uzun süredir devam eden ve mevcut yanıtları çok sayıda oyla tekrarlamayın.
TT.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.