2012-04-22 18 views
15

:Sorun şu ki; aşağıdaki SQL Verilen

Msg 207, Level 16, State 1, Hat 10 Geçersiz sütun adı ':

IF EXISTS (SELECT * FROM sys.columns WHERE name = 'NewFieldName' AND object_id = OBJECT_ID('dbo.MyTableName')) 
    RETURN 

-- Add NewFieldName column to part of the Summer 2012 release cycle. 
ALTER TABLE dbo.[MyTableName] ADD 
    [NewFieldName] SmallINT NOT NULL 
     CONSTRAINT DF_MyTableName_NewFieldName DEFAULT (2) 

UPDATE [MyTableName] SET NewFieldName = 1 WHERE [Name] = 'FindMe' --Update one specific value 

aşağıdaki hata iletisini üretir NewFieldName'.

Ben temel bir şey eksik ama alter GÜNCELLEME çalıştırmak her yapar sonra "GO" koymak çalışıyorum eminim ve bunu yapmak istemiyoruz.

Bu ifadeyi, sütunun var olup olmadığını ve eklenmediğini ve sonra UPDATE ifadelerimde belirtildiği gibi değerlerin mi ayarlandığını kontrol edecek şekilde nasıl yapılandırabilirim?

+0

İlk güncelleştirme bildirimi gereksizdir, tüm kayıtları 2'ye göre ayarlarsınız. Varsayılan (2) ' –

+0

Yukarıdaki ifadeler benim için çalıştı. Onları nasıl yürütüyorsun? "NewFieldName" sütunu oluşturuldu mu? –

+0

@AmirIsmail yanlış. ALTER deyimini çalıştırdığımda, alan oluşturulur, ancak varolan kayıtlar için varsayılan ayarlanmamıştır. Belki de bunu yapmak için ALTER yazmanın farklı bir yolu vardır; ancak mevcut yapı mevcut satırlar için varsayılan değerleri ayarlamaz. – ray

cevap

17

Yeni sütun eklendikten sonra derlenecek yeni sütuna referans veren ifadeye ihtiyacınız var. Bunu yapmanın bir yolu, EXEC ile bir alt grup olarak çalıştırmaktır. Toplu böylece tabloya başvuran içindeki tüm ifadeler ertelenmiş derleme tabi yani derlendi olduğunda tablo kendisi olmasaydı çünkü

IF NOT EXISTS (SELECT * 
       FROM sys.columns 
       WHERE name = 'NewFieldName' 
         AND object_id = OBJECT_ID('dbo.MyTableName')) 
BEGIN 
    -- Add NewFieldName column to part of the Summer 2012 release cycle. 
    ALTER TABLE dbo.[MyTableName] 
      ADD [NewFieldName] SMALLINT NOT NULL 
      CONSTRAINT DF_MyTableName_NewFieldName DEFAULT (2) 

    EXEC(' UPDATE [MyTableName] SET NewFieldName = 1 WHERE [Name] = ''FindMe''') 
END 

sizin için çalıştı nedeni başlangıçta muhtemelen olduğunu.

İlgili konular