sql server geçersiz nesne adı - ancak tablolar SSMS tabloları listesinde listeleniyor


336

Stored ProcedureYeni oluşturulan bir veritabanı için bir oluşturmaya çalışıyorum . Ancak, SSMSanlaşmazlık oluşturulan tabloların yarısından fazlasını tanımıyor.

Örneğin, tabloların altındaki sol sütunda bir tablo bulunurken , yeni sorgu penceresine dbo.Room" dbo." yazdığımda , bu tablo listelenmez, aslında 37 tablodan yalnızca 17'si listelenir.

Intellisense tarafından listelenen tablolar ile olmayanlar arasında fark göremiyorum. Manuel olarak dbo.Room yazarsanız, altı çizili,

Geçersiz Nesne Adı 'dbo.Room' ..

Masaları kurarken bir şey kaçırdım mı?

GÜNCELLEME: Tablolar listesini yenilemeyi denedim (birkaç kez)


11
[DatabaseName].[Schema].[TableName]
Ivan Chau

Yanıtlar:


703

Deneyin:

Edit-> IntelliSense->Refresh Local Cache

Bu, daktilo desteği ve yürütme öncesi hata algılama sağlamak için Intellisense tarafından önbelleğe alınan verileri yeniler.

NOT: IntelliSense menüsünün görünmesi için imlecinizin sorgu düzenleyicisinde olması gerekir.


8
Intellisense / SSMS periyodik olarak kendini yeniliyor mu? Yoksa bu her zaman manuel bir süreç olmalı mı? (2005'te SSMS'ye dayanarak tahminimi aldım, ancak biri her zaman umut edebilir.)
Philip Kelley

37
2012'de bunu yapmanız inanılmaz. Intellisense'i birkaç saniyede bir otomatik olarak güncelleyemediler mi?
Matthew Lock

6
Bu, veritabanına vurulmasını ve tablo / görünüm tanımlarının birkaç saniyede bir çekilmesini gerektirebilir.
jinglesthula

8
NOT: IntelliSense menüsünün görünmesi için imlecinizin sorgu düzenleyicisinde olması gerekir.
bradlis7

5
@jinglesthula: Bu bana veritabanı sunucusuna isabet etmekten kurtarır !
Paul

80

Ctrl+ Shift+ R2008 yönetim stüdyosunda da zekayı yeniler.


Bu özelliğe sahip değilim ... ctrl + shift + R tuşlarına bastığımda hiçbir şey değişmiyor
Ibrahim Amer

4
@IbrahimAmer Intellisense menü seçeneğinin kullanılabilmesi için imlecinizin bir sorgu düzenleyicisinde olması gerekir. Akıllı menü seçeneği yoksa, kısayol hiçbir şey yapmaz.
Rachael

Ayrıca SQL Server Management Studio 2014'te T-SQL için çalışır
Vahid Amiri

44

Seçilen DB'nin tablonun bulunduğu alan olduğundan emin olun. Script'i çalıştırıyordum Master. Benim durumumda, geçmek zorunda kaldım hr_db.

resim açıklamasını buraya girin

Çaylak hatası ama birine yardım edebilir.


4
Sunucuyu yeniden bağladığınızda açık bir sebep olmadan "master" a geçtiği için dürüst olmak gerekirse bir çaylak hatası olduğundan emin değilim. :)
Chris Rae

Durum buysa ve sorgu tablo adlarını tam olarak nitelendirmediyse, kod yürütülmez. Açıkladığınız sorun katkıda bulunan bir faktör olmadığında OP'nin yanlış pozitif hata tespitini tanımladığına inanıyorum. (Kesinlikle, aramaya ve burada yaralanmaya başladığımda olasılığı zaten
dışlamıştım

Kesinlikle benim sorunum. SMS'den veritabanı bağlamını veya başka ipuçlarını değiştirdiğine dair herhangi bir belirti yoktur.
Daniel Black

1
@ChrisRae: Bunun nedeni master, kullanıcı girişiniz için varsayılan veritabanı olarak ayarlanmış olmasıdır. Sadece kullanarak bunu değiştirmek sp_defaultdbiçin başka bir veritabanı giriş yaparken diğer veritabanı SSMS seçildiği olması (ayrıca göre SSMS ayarlanabilir. Security > Logins > your user login > Properties > Default database)
Axd

36

yeni bir SQL Server nesnesi oluşturduğunuzda, yeni oluşturulan nesneniz IntelliSence Yerel Önbellek'te güncellenmez ve bu nedenle bu nesnenin altında kırmızı bir çizgi gösterir. Bu nedenle, yalnızca SSMS IntelliSence Yerel Önbelleği'ni yenilemeniz gerekir ve bir kez yenilediğinizde, IntelliSenceotomatik olarak önbelleğe yeni oluşturulan nesne eklenir ve kırmızı çizgi kaybolur. bunu dene

Edit -> IntelliSense -> Refresh Local Cache veya Ctrl+ Shift+R

resim açıklamasını buraya girin


1
Bu özelliğe sahip değilim ... ctrl + shift + R tuşlarına bastığımda hiçbir şey değişmiyor
Ibrahim Amer

4
@IbrahimAmer Intellisense menü seçeneğinin kullanılabilmesi için imlecinizin bir sorgu düzenleyicisinde olması gerekir. Akıllı menü seçeneği yoksa, kısayol hiçbir şey yapmaz.
Rachael

18

Benim durumumda, IntelliSense önbelleği tamamen farklı bir veritabanı için nesne bilgilerini listeliyordu. SSMS'de "Yeni Sorgu" düğmesini tıklarsam, sunucudaki varsayılan kataloğuma bir sorgu açar ve bu sorgu düzenleyicisi her zaman yalnızca bu veritabanını kullanır. Önbelleği yenilemek hiçbir şeyi değiştirmedi. SSMS'yi yeniden başlatmak hiçbir şeyi değiştirmedi. Veritabanını değiştirmek hiçbir şeyi değiştirmedi.

Ben aslında kullanmak istediğim veritabanına sağ tıklayarak ve o bağlam menüsünden "Yeni Sorgu" seçerek bir sorgu oluşturma sona erdi. Şimdi SSMS, IntelliSense için doğru nesneleri kullanıyor.


3
Benim durumum da buydu. Paylaşım için teşekkürler.
Behrooz Karjoo

1
DatbaseName GO, sorgudan önce bağlamı kurmada da çalışır
Behrooz Karjoo

@BehroozKarjoo Evet, denedim. Her zaman işe yaramıyor gibi görünüyor. Yeniden üretebilseydim, Microsoft Connect'e ya da başka bir şeye koyardım. Eminim WONTFIX veya eşit derecede rahatsız edici bir şey olarak işaretlediler, ama rapor ediyorum.
Bacon Bits

Mükemmel çalıştı! Teşekkür ederim! :)
Sean

SSMS'yi yeniden başlatın ve benim için çalışılan yeni sorguyu sağ tıklayın.
Hitsa

10

Söz konusu tablonun var olduğundan emin misiniz?

Nesne Gezgini'nde tablo görünümünü yenilediniz mi? Bu, "tablolar" klasörünü sağ tıklayıpF5 .

Intellisense önbelleğini de yeniden incelemeniz gerekebilir.

Bu, menü rotasını izleyerek yapılabilir: Düzenle -> IntelliSense -> Yerel Önbelleği Yenile


7

Çözüm şudur:

  • Sorgu menüsünü tıklayın,
  • ardından 'Veritabanını Değiştir'i tıklayın.
  • Uygun veritabanı adınızı seçin.

Bu kadar.


6

Aynı sözdizimi problemini kullandığımda benimle aynı problem çözüldü.

Sözdizimi:

Use [YourDatabaseName]
Your Query Here

4

SP3'ü SQL Server 2008 Enterprise'a yükledikten sonra bile bu hala bir "sorun" dur. Ctrl+ Shift+ Rherkesin söylediği gibi bu sorunu benim için çözdü.


Bu özelliğe sahip değilim ... ctrl + shift + R tuşlarına bastığımda hiçbir şey değişmiyor
Ibrahim Amer

@IbrahimAmer Intellisense menü seçeneğinin kullanılabilmesi için imlecinizin bir sorgu düzenleyicisinde olması gerekir. Akıllı menü seçeneği yoksa, kısayol hiçbir şey yapmaz.
Rachael

3

SSMS 2016 için çözüldü.

Benzer bir sorun vardı, ancak Intellisense Düzen menüsünde değildi.

Düzeltilen şey Intellisens'i açıp kapamak, SQL editörüne sağ tıklamak ve 'Intellisense Etkin' üzerine tıklamaktı. Tekrar açmak için 'Intellisense Enabled' üzerine tekrar sağ tıklayın. Ctr Q, bunu da yapıyorum.

Bu sorunu çözdü ve ayrıca Düzen menüsünde Intellisense olsun biliyorum.


2

SMS'leri kapatıp tekrar açmak zorunda kaldım. Yenile Yerel Önbelleği denedim ve bu işe yaramadı.


1

denediniz mi: veritabanına sağ tıklayın ve "yenile" ye tıklayın


Evet, denedim, orada olduğundan eminim, kayıtlar ekleyebilir ve değiştirebilirim. Yeniden başlatmayı deneyeceğim.
Richbits

1

Bu sorunun zaten cevaplanmış olduğunu fark ettim, ancak farklı bir çözümüm vardı:

Tabloları yeniden oluşturmadan bıraktığınız bir komut dosyası yazıyorsanız, daha sonra başvurmaya çalışırsanız bu tablolar eksik olarak gösterilir.

Not: Bu, sürekli çalıştırılan bir komut dosyasıyla gerçekleşmez, ancak bazen sorgulama içeren bir komut dosyasına sahip olmak, bunları her zaman yazmaktan daha kolaydır.


0

Şu sorunla karşılaştım: ODBC ve Firedac Bağlantısı'nda ODBC ve SQL-Server-Kimlik Doğrulaması

Çözüm: Param MetaDefSchema'yı sqlserver kullanıcı adına ayarlamak zorunda kaldım: FDConnection1.Params.AddPair ('MetaDefSchema', self.FDConnection1.Params.UserName);

Wikidoc sais: MetaDefSchema = Varsayılan şema adı. Tasarım zaman kodu >> hariç << !! MetaDefSchema'ya eşitse SQL-Server-Authenticatoinname nesnesinden şema adı.

ayar yapmadan otomatik kodlayıcı şunları oluşturur: dbname.username.tablename -> geçersiz nesne adı

MetaDefSchema'yı sqlserver-kullanıcıadı olarak ayarlayarak: dbname.tablename -> çalışıyor!

Ayrıca şu adresteki embarcadero-doc'ye bakın: http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_SQL_Server_(FireDAC)

Umarım başka birine yardımcı olur ..

Saygılarımla, Lutz


0

Azure veri stüdyosunda "cmd + shift + p" tuşlarına basın ve "intellisense" yazın, sonra intellisense önbelleğini yenileme seçeneğini göreceksiniz.


0

Modelleri yazdıktan sonra taşıma işlemlerinizi oluşturmayı unutmayın

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.