Varolan bir tablodan bir sütun nasıl kaldırılır?
Ben bir masa MEN
ile Fname
veLname
Kaldırmam lazım Lname
Nasıl yapılır?
Varolan bir tablodan bir sütun nasıl kaldırılır?
Ben bir masa MEN
ile Fname
veLname
Kaldırmam lazım Lname
Nasıl yapılır?
Yanıtlar:
ALTER TABLE MEN DROP COLUMN Lname
Ö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
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:DROP
CONSTRAINT
DROP
COLUMN
CONSTRAINT
ALTER TABLE MEN DROP CONSTRAINT {constraint_name_on_column_Lname}
constraint
bir için Sütun ?
Gelen SQL Sunucusu 2016 Yeni DIE ifadeleri kullanabilirsiniz.
ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name
Yukarıdaki sorgu, drops
yalnızca exists
tabloda başka bir hata atmazsa sütun yeniden çalıştırılabilir .
IF
Bırakmadan column
önce varlığını kontrol etmek için büyük sarmalayıcılar kullanmak yerine yukarıdaki DDL
ifadeyi çalıştırabilirsiniz.
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
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:
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.
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.
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.
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 ()
Sözdizimi:
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;
Örneğin:
alter table Employee drop column address;