SQL Server'da şemaya bağlı bir görünüm tarafından başvurulan bir sütunun boyutunu değiştirme


124

Kullanarak sql sunucusunda bir sütunun boyutunu değiştirmeye çalışıyorum:

ALTER TABLE [dbo].[Address]
ALTER COLUMN [Addr1] [nvarchar](80) NULL

Addr1orijinal uzunluğu nerede 40.

Başarısız oldu, bu hatayı yükseltti:

The object 'Address_e' is dependent on column 'Addr1'.
ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access 
this column.

Bunu okumaya çalıştım ve öyle görünüyor ki, bazı görünümler bu sütuna referans veriyor ve görünüşe göre SQL Server aslında hatayı yükselten sütunu bırakmaya çalışıyor.

Address_e önceki DB Yöneticisi tarafından oluşturulan bir görünümdür.

Sütunun boyutunu değiştirmenin başka bir yolu var mı?


2
Address_e, önceki DB Yöneticisi tarafından oluşturulan bir görünümdür. Ve Remus'un bahsettiği gibi, SCHEMABINDING tanımlanmıştır.
Staelen

Yanıtlar:


58

Görünümler büyük olasılıkla ŞEMA BİRLİĞİ İLE seçeneği kullanılarak oluşturulur ve bu, bu tür değişiklikleri önlemek için açıkça kablolanmış oldukları anlamına gelir. Görünüşe göre şema işe yaradı ve bu görüşleri kırmanızı engelledi, şanslı gün, ha? Veritabanı yöneticinizle iletişime geçin ve veritabanı üzerindeki etkisini belirledikten sonra ondan değişikliği yapmasını isteyin.

Gönderen MSDN :

SCHEMABINDING

Görünümü, temel alınan tablo veya tabloların şemasına bağlar. SCHEMABINDING belirtildiğinde, temel tablo veya tablolar, görünüm tanımını etkileyecek şekilde değiştirilemez. Görünüm tanımının kendisi, değiştirilecek tabloya olan bağımlılıkları kaldırmak için önce değiştirilmeli veya bırakılmalıdır .


1
teşekkürler Remus, görünümde SCHEMABINDING tanımlı. Kısıtlamayı atlamanın kolay bir yolu var mı yoksa çalışmasını sağlamak için gerçekten görünümleri kaldırmam gerekiyor mu?
Staelen

1
Baypas edemezsin, bütün amacı bu. Biri tablo değişikliklerini önlemek için şemabindig'i eklemek için ekstra uzunluğa gitti. Bu bir kaza değil, görünen o ki kişi ne yaptığını biliyor. Eğer Are emin Tabloyu değiştirmek istiyor?
Remus Rusanu

1
evet, eminim =) ve mantıksal olarak (bu şekilde çalışmadığını bilmeme rağmen) sütunun uzunluğunu artırıyorum, bu sadece sütun düşürülüp yeniden oluşturulmazsa gerçekten iyi olacaktır, ancak ne yazık ki öyle değil ... ama yardımın için teşekkürler! = D
Staelen

2
Aynı sorunu görüyorum ve maalesef görünümleri indekslemek için ŞEMA BİÇİMLENDİRME görünümlerini kullanıyoruz. Bu yüzden benim durumumda SCHEMABINDING'i temel tablolardaki değişiklikleri açıkça engellemek için kullanmıyorum, yalnızca SQL Server'ın dizinlenmiş görünümler için gereksinimlerine uymak için kullanıyorum. Ayrıca görüşlerimi düşürmeden ve yeniden oluşturmadan bunu atlamak isterim.
jpierson

256
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)

11
hayır, sorun Remus'un bahsettiği gibiydi. kodun kendisinde yanlış bir şey yok
Staelen

11
@NilRad Ummm, belki de PL-SQL'i düşünüyorsunuz? ALTER COLUMN, SQL 2008 R2'de doğru sözdizimidir
schmidlop

4
Bir şey mi kaçırıyorum? Neden bu kadar çok olumlu oy var? Soruyu cevaplamıyor.
Andy Wiesendanger

13
Ek oyların sayısı, bu sorunun şu anda 'tsql nvarchar uzunluğunu değiştir' için Google'da en çok hit olması nedeniyle olabilir ve bu nedenle, yalnızca bir sütunun uzunluğunu nasıl değiştireceklerini hatırlatmak isteyen insanlar (benim gibi) bu yanıtı görebilir ve yukarı -Sorunun, sorunun başlığının gösterdiğinden daha ince olduğunu fark etmeden (yorumunuzu okuyana kadar yapmadığım gibi) "teşekkürler" demeye oy verin.
dumbledad

6

SQL Server 2008'de herhangi biri "çoğaltılmış tablonun sütun genişliğini artırmak" isterse, " replicate_ddl=1" özelliğini değiştirmeye gerek yoktur . Aşağıdaki adımları uygulamanız yeterlidir -

  1. SSMS'yi açın
  2. Publisher veritabanına bağlanın
  3. komut çalıştır - ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
  4. Bu sütun genişliğini artacak varchar(x)için varchar(22)ve aynı değişiklik, (işlem çoğaltılmış var) üzerinde abone görebilirsiniz. Dolayısıyla, çoğaltmayı yeniden başlatmaya gerek yok

Umarım bu, onu arayan herkese yardımcı olur.


5

Bu bağlantıya bakın

T-SQL Komutlarını Kullanarak Bir MS SQL Sunucusu Tablo Sütununu Varsayılan Kısıtlamayla Yeniden Boyutlandırma veya Değiştirme

böyle bir SQL Server sorununun çözümü,

Tablo sütununda VARSAYILAN Kısıtlamayı düşürme veya devre dışı bırakma.

Tablo sütunu veri türünü ve / veya veri boyutunu değiştirme.

Sql tablo sütununda varsayılan kısıtlamanın yeniden oluşturulması veya etkinleştirilmesi.

Hoşçakal


ve şema bağlama görünümlerinin bırakılması ve yeniden oluşturulması gerekir.
nurettin

2

İşte kullandığım programın sürümüyle çalışan şey: sizin için de çalışabilir.

Sadece bunu yapan talimatı ve komutu yerleştireceğim. sınıf, tablonun adıdır. bu yöntemle tablodaki kendisini değiştirirsiniz. sadece arama sürecinin geri dönüşü değil.


masa sınıfını görüntüle

select * from class

FacID sütunlarının uzunluğunu ("faci" olarak görülür) ve sınıf numarasını ("sınıfnu" olarak görülür) tüm etiketlere uyacak şekilde değiştirin.

alter table class modify facid varchar (5);

alter table class modify classnumber varchar(11);

farkı görmek için tabloyu tekrar görüntüleyin

select * from class;

(farkı görmek için komutu tekrar çalıştırın)


Bu, gerçek tabloyu tamamen değiştirir, ancak daha iyisi için.

Not: Bu talimatları komutlar için bir not olarak hazırladım. Bu bir test değil, ancak birinde yardımcı olabilir :)


0

Sütun harmanlamasını kontrol edin. Bu komut dosyası, harmanlamayı tablo varsayılanına değiştirebilir. Mevcut harmanlamayı betiğe ekleyin.

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.