Varolan bir tablodan bir sütun nasıl kaldırılır?


Yanıtlar:



157

jenerik:

ALTER TABLE table_name DROP COLUMN column_name;

Senin durumunda:

ALTER TABLE MEN DROP COLUMN Lname;

72

Örneğiniz basittir ve herhangi bir ek tablo değişikliği gerektirmez, ancak genel olarak konuşmak gerekirse bu önemsiz değildir.

Bu sütuna diğer tablolar tarafından başvuruluyorsa, diğer tablolarla / sütunlarla ne yapacağınızı bulmanız gerekir. Bir seçenek, yabancı anahtarları kaldırmak ve başvurulan verileri diğer tablolarda tutmaktır.

Başka bir seçenek, tüm referans sütunlarını bulmak ve artık gerekmediklerinde kaldırmaktır.

Bu gibi durumlarda asıl zorluk tüm yabancı anahtarları bulmaktır. Bunu sistem tablolarını sorgulayarak veya ApexSQL Arama (ücretsiz) veya Red Gate Bağımlılığı izleyicisi (premium ancak daha fazla özellik) gibi üçüncü taraf araçlarını kullanarak yapabilirsiniz . Burada yabancı anahtarların üzerinde bir iplik var


47

Bu doğru cevap:

ALTER TABLE MEN DROP COLUMN Lname

Bir Ama eğer ... CONSTRAINTüzerinde var COLUMN, o zaman gerekir ilk, o zaman mümkün olacaktır . Bırakmak için şunu çalıştırın:DROPCONSTRAINTDROPCOLUMNCONSTRAINT

ALTER TABLE MEN DROP CONSTRAINT {constraint_name_on_column_Lname}

ALTER TABLE tb_name DROP DIŞ ANAHTAR key_name
bortunac

3
NASIL arama constraintbir için Sütun ?
Kiquenet

21

Gelen SQL Sunucusu 2016 Yeni DIE ifadeleri kullanabilirsiniz.

ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name

Yukarıdaki sorgu, dropsyalnızca existstabloda başka bir hata atmazsa sütun yeniden çalıştırılabilir .

IFBırakmadan columnönce varlığını kontrol etmek için büyük sarmalayıcılar kullanmak yerine yukarıdaki DDLifadeyi çalıştırabilirsiniz.


3
Ne var DİE ifadeleri ?
Kiquenet

3
Bu arada, "yeniden çalıştırılabilir" komut / fonksiyon bu tür çağırabilirsiniz İdempotent
tomosius

4
kabul edilen cevap bu olmalıdır. Otomatik sql betiği dağıtımlarınız varsa, komut dosyalarınızı bu şekilde defalarca yazmanız gerekir.
victor

7

Soru şu ki, sadece mevcut olmayan bir tablodan bir sütunu silebilir misiniz ;-)

BEGIN TRANSACTION

IF exists (SELECT * FROM  sys.columns c 
INNER JOIN  sys.objects t ON (c.[object_id] = t.[object_id])
WHERE t.[object_id] = OBJECT_ID(N'[dbo].[MyTable]')
AND c.[name] = 'ColumnName')
    BEGIN TRY
        ALTER TABLE [dbo].[MyTable] DROP COLUMN ColumnName
    END TRY
    BEGIN CATCH
        print 'FAILED!'
    END CATCH
ELSE
    BEGIN 
        SELECT ERROR_NUMBER() AS ErrorNumber;
        print 'NO TABLE OR COLUMN FOUND !'
    END 

COMMIT  

1
Varolmayan bir tablodan bir sütun bırakmak isterseniz, bunu yapmanın yolu olurdu
Matiaan

6

Bunun basit cevabı bunu kullanmaktır:

ALTER TABLE MEN DROP COLUMN Lname;

Birden fazla sütun şu şekilde belirtilebilir:

ALTER TABLE MEN DROP COLUMN Lname, secondcol, thirdcol;

SQL Server 2016'dan sütunu yalnızca varsa bırakabilirsiniz. Bu, büyük olasılıkla umursadığınız bir şey olmayan sütun olmadığında hata almanızı engeller.

ALTER TABLE MEN DROP COLUMN IF EXISTS Lname;

Sütunları bırakmak için bazı önkoşullar vardır. Bırakılan sütunlar şu şekilde olamaz:

  • Bir Dizin tarafından kullanılır
  • CHECK, FOREIGN KEY, UNIQUE veya PRIMARY KEY kısıtlamaları tarafından kullanılır
  • Bir VARSAYILAN ile ilişkili
  • Bir kurala bağlı

Yukarıdakilerden herhangi biri doğruysa, önce bu ilişkilendirmeleri bırakmanız gerekir.

Ayrıca, bir sütunun bırakılmasının tablonun kümelenmiş dizini yeniden oluşturuluncaya kadar sabit diskteki alanı geri kazanmayacağı da not edilmelidir. Bu nedenle, yukarıdaki gibi bir tablo yeniden oluşturma komutuyla yukarıdakileri takip etmek genellikle iyi bir fikirdir:

ALTER TABLE MEN REBUILD;

Sonunda bazılarının söylediği gibi bu yavaş olabilir ve muhtemelen süre boyunca masayı kilitler. İstenen yapıya sahip yeni bir tablo oluşturmak ve ardından şu şekilde yeniden adlandırmak mümkündür:

SELECT 
   Fname 
   -- Note LName the column not wanted is not selected
INTO 
   new_MEN
FROM
   MEN;

EXEC sp_rename 'MEN', 'old_MEN';
EXEC sp_rename 'new_MEN', 'MEN';

DROP TABLE old_MEN;

Ancak, burada ilk select ve son rename komutu arasında eklenen satırların veri kaybı için bir pencere olduğu konusunda uyarılmalıdır.


2

Mevcut tabloya sütun eklemek için:

ALTER TABLE table_name
 ADD
 column_name DATATYPE NULL  

Mevcut tablodaki sütunları silmek için:

ALTER TABLE table_name
DROP COLUMN column_name

Soru ADD sütunları hakkında değil .
Kiquenet

2

Bu, SSMS GUI aracılığıyla da yapılabilir. Bu yöntemle ilgili güzel olan şey, bu sütunda herhangi bir ilişki varsa sizi uyarır ve bunları da otomatik olarak silebilir.

  1. Tabloyu aşağıdaki gibi Tasarım görünümüne (tabloya sağ tıklayın) koyun:

resim açıklamasını buraya girin

  1. Tablonun Tasarım görünümünde sütuna sağ tıklayın ve "Sütunu Sil" e tıklayın

resim açıklamasını buraya girin

Daha önce de belirttiğim gibi, silinmesi gereken herhangi bir ilişki varsa, bu noktada da bunları silmek isteyip istemediğiniz sorulur. Sütunu silmek için büyük olasılıkla bunu yapmanız gerekecektir.


0

C # kullanıyorsanız ve Kimlik sütunu int ise, herhangi bir değer sağlamadan yeni bir int örneği oluşturun.

[identity_column] = yeni int ()


Bu cevap ne yapacak? Sütunu tablodan kaldıracak mı?
Prashant Pimpale

0

Sözdizimi:

ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;

Örneğin:

alter table Employee drop column address;
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.