SQL komut dosyasında hata: Toplu işlem başına yalnızca bir ifadeye izin verilir


128

PostDeployment'da bir DACPAC'de çalıştırmak istediğim 4 sql komut dosyam var, ancak bunlardan 3'ü için VS projesi oluşturmaya çalıştığımda şu hatayı alıyorum:

Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.

Komut dosyaları, yalnızca INSERTDB üzerindeki farklı tablolardaki ifadeleri içerir . Ve hepsi bu şekilde yapılandırılmış

IF NOT EXISTS (SELECT 1 FROM dbo.Criteria WHERE Name = 'Mileage') INSERT INTO dbo.Criteria(Name) VALUES ('Mileage');

yalnızca farklı tablolarda ve farklı verilerle.

Sorum şu ki VS neden tüm komut dosyaları sözdizimi ve işlemler açısından aynı iken 3 tanesinden şikayet ediyor?

Not: Hatanın gösterdiği gibi ifadeler arasına 'GO' eklemek hiçbir şey yapmaz.

Yanıtlar:


319

Sorunu buldum. Dosyayı VS'ye eklediğimde Build Action = Nonedosya özelliklerinden ayarlamayı unuttum . Bunu değiştirmek sorunu çözdü ve proje şimdi derleniyor.


26
Büyük yakalamak. Vay canına, Microsoft, cidden mi? Bu hata veya mesajı herhangi bir şekilde, şekilde veya biçimde nasıl sezgiseldir?
Mike K

9
Bu cevabı takdir edin, ancak "unuttum" u kullanmanla kafam karıştı - dünyada nasıl ilk etapta gerekli olduğunu bilmek insan?
pettys

2
Çünkü bir süre önce benzer bir senaryo yazdım ve birisi bana eylem inşa
etmekten bahsetmedi

Bu benim sorunumu çözdü. Başparmak havaya!
dance2die

3
Harika ! günümü kurtardım. Ve bu kadar yanıltıcı bir mesaj için MSBuild'e utan
Dio Phung

8

Ne olursa olsun, bu oldukça eski görünse de, birkaç saat boyunca bununla da uğraştım ve bu yolun birçokları için yararlı olabileceğini düşünüyorum.

İçinde Database project, olarak ayarlanan dosyalar BuildVeritabanı yapısı olarak kabul edilir, bu nedenle böyle bir dosyada tasarım gereği yalnızca bir ifadeye izin verilir. Gone de başka bir toplu sonlandırıcı bu davranışı değiştirmez, bu mesaj sadece hatadır. Daha fazla bilgi burada.

Bu tür projedeki dosyalar için birçok başka derleme seçeneği vardır. Davanız için öyle görünüyor PostDeploy. Böyle bir dosyada, insertsvb. Çeşitli komutlara sahip olabilirsiniz .

Daha sonra Veritabanı projesinin çıktısını Veri Katmanı DB uygulamaları için dacpac dosyası olarak kullanabilirsiniz (Aksi takdirde dahil değildir).


-3

Her ifadenin sonundan; (noktalı virgül) öğesini kaldırın ve emin değilim, ancak yukarıdaki ifadeler arasında GO gerekli değildir.


Bunu yaptım. Hiçbir şey yapmaz. GO'nun gerekli olmadığını biliyorum, ama denedim çünkü bunun için 2 saatten fazla zaman harcadım.
Cosmin Ionascu

4
Her ifadeden sonra noktalı virgül eklemek standart sözdizimidir ve yıllardır savunulmaktadır. Noktalı virgüllerin eksik olması nedeniyle yanlış giden 2 şey oldu. Bir geliştiriciye noktalı virgülün en iyi uygulama olduğu şüpheli noktalı virgül eklememesini tavsiye etmek.
Brandon
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.