ชื่อวัตถุที่ไม่ถูกต้องของ sql server - แต่ตารางจะแสดงรายการในรายการตาราง SSMS


336

ฉันกำลังพยายามStored Procedureสร้างฐานข้อมูลที่สร้างขึ้นใหม่ อย่างไรก็ตามSSMSIntelliSense ไม่รู้จักมากกว่าครึ่งหนึ่งของตารางที่สร้างขึ้น

ตัวอย่างเช่นในคอลัมน์ด้านซ้ายใต้ตารางฉันมีตารางdbo.Roomเมื่อฉันพิมพ์ " dbo." ในหน้าต่างคิวรีใหม่ตารางนั้นจะไม่ปรากฏในความเป็นจริงมีเพียง 17 จาก 37 ตารางเท่านั้น

ฉันไม่เห็นความแตกต่างระหว่างตารางที่แสดงโดย Intellisense และที่ไม่ ถ้าฉันพิมพ์ dbo.Room ด้วยตนเองมันจะขีดเส้นใต้ด้วยข้อผิดพลาด

ชื่อวัตถุไม่ถูกต้อง 'dbo.Room' ..

ฉันพลาดบางอย่างในการตั้งค่าตารางหรือไม่

UPDATE: ฉันลองรีเฟรชรายการตาราง (หลายครั้ง)


11
คำตอบที่ใช้ได้: [DatabaseName].[Schema].[TableName] SO: ชื่อวัตถุไม่ถูกต้อง sql
Ivan Chau

คำตอบ:


703

ลอง:

Edit-> IntelliSense->Refresh Local Cache

สิ่งนี้ควรรีเฟรชข้อมูลที่แคชโดย Intellisense เพื่อให้การสนับสนุนประเภทหัวพิมพ์และการตรวจจับข้อผิดพลาดก่อนการเรียกใช้งาน

หมายเหตุ: เคอร์เซอร์ของคุณต้องอยู่ในตัวแก้ไขคิวรีเพื่อให้มองเห็นเมนู IntelliSense


8
Intellisense / SSMS รีเฟรชตัวเองเป็นระยะหรือไม่? หรือนี่จะต้องเป็นกระบวนการแบบแมนนวลเสมอ (ผมเคยได้คาดเดาของฉันอยู่บนพื้นฐานของ SSMS ในปี 2005 แต่อย่างหนึ่งเสมอสามารถหวัง.)
ฟิลิปเคลลี่

37
ไม่น่าเชื่อว่าในปี 2012 คุณต้องทำเช่นนี้ พวกเขาไม่สามารถอัปเดต Intellisense ทุกสองสามวินาทีโดยอัตโนมัติหรือไม่
Matthew Lock

6
ที่อาจต้องกดปุ่มฐานข้อมูลและดึงคำนิยามตาราง / มุมมองทุกสองสามวินาที
jinglesthula

8
หมายเหตุ: เคอร์เซอร์ของคุณต้องอยู่ในตัวแก้ไขคิวรีเพื่อให้มองเห็นเมนู IntelliSense
bradlis7

5
@ Jinglesthula: นั่นจะช่วยฉันกดปุ่มเซิร์ฟเวอร์ฐานข้อมูล!
พอล

80

Ctrl+ Shift+ Rรีเฟรช Intellisense ใน Management Studio 2008 เช่นกัน


ฉันไม่ได้มีคุณสมบัตินี้ ... เมื่อฉันกด ctrl + shift + R ไม่มีการเปลี่ยนแปลงอะไรเลย
อิบราฮิม Amer

4
@IbrahimAmer เคอร์เซอร์ของคุณต้องอยู่ในโปรแกรมแก้ไขแบบสอบถามเพื่อให้ตัวเลือกเมนู Intellisense พร้อมใช้งาน หากไม่มีตัวเลือกเมนู Intellisense ทางลัดจะไม่ทำอะไรเลย
Rachael

นอกจากนี้ยังใช้งานได้กับ T-SQL ใน SQL Server Management Studio 2014
Vahid Amiri

44

ตรวจสอบให้แน่ใจว่าฐานข้อมูลที่เลือกนั้นเป็นตารางที่อยู่ Masterฉันถูกเรียกใช้สคริปต์บน ในกรณีของฉันฉันต้องเปลี่ยนไปhr_dbใช้

ป้อนคำอธิบายรูปภาพที่นี่

ความผิดพลาดหน้าใหม่ แต่สามารถช่วยใครบางคน


4
ฉันไม่แน่ใจว่าเป็นความผิดพลาดหน้าใหม่ที่จะซื่อสัตย์เมื่อใดก็ตามที่คุณเชื่อมต่อเซิร์ฟเวอร์ใหม่ด้วยเหตุผลบางอย่างเปลี่ยนเป็น "ต้นแบบ" ด้วยเหตุผลที่ไม่ชัดเจน :)
Chris Rae

หากเป็นกรณีนี้และแบบสอบถามไม่ได้มีคุณสมบัติครบถ้วนชื่อตารางรหัสจะไม่ทำงาน ฉันเชื่อว่า OP อธิบายการตรวจจับข้อผิดพลาดเชิงบวกผิดเมื่อปัญหาที่คุณอธิบายไม่ได้เป็นปัจจัยสนับสนุน (แน่นอนฉันได้ตัดออกความเป็นไปได้แล้วเมื่อฉันไปค้นหาและทำให้บาดแผลที่นี่)
Dodecaphone

ปัญหาของฉันแน่นอน ไม่มีการบ่งชี้จาก SMS ว่ามีการเปลี่ยนแปลงบริบทฐานข้อมูลหรือเงื่อนงำอื่น ๆ
Daniel Black

1
@ChrisRae: นั่นเป็นเพราะmasterมีการตั้งค่าเป็นฐานข้อมูลเริ่มต้นสำหรับการเข้าสู่ระบบผู้ใช้ของคุณ เพียงแค่เปลี่ยนการใช้sp_defaultdbฐานข้อมูลอื่นเพื่อให้มีการเลือกฐานข้อมูลอื่นใน SSMS เมื่อคุณลงชื่อเข้าใช้ (สามารถตั้งค่าเป็น SSMS ได้ด้วยSecurity > Logins > your user login > Properties > Default database)
AxD

36

เมื่อคุณสร้างวัตถุ SQL Server ใหม่วัตถุที่สร้างขึ้นใหม่ของคุณจะไม่ได้รับการอัพเดตใน IntelliSence Local Cache และเนื่องจากสิ่งนี้มันจะแสดงบรรทัดสีแดงใต้วัตถุนั้น ดังนั้นคุณต้องรีเฟรช SSMS IntelliSence Local Cache และเมื่อคุณรีเฟรชIntelliSenceจะเพิ่มวัตถุที่สร้างขึ้นใหม่ในแคชโดยอัตโนมัติและเส้นสีแดงจะหายไป ลองนี้

Edit -> IntelliSense -> Refresh Local Cache หรือ Ctrl+ Shift+R

ป้อนคำอธิบายรูปภาพที่นี่


1
ฉันไม่ได้มีคุณสมบัตินี้ ... เมื่อฉันกด ctrl + shift + R ไม่มีการเปลี่ยนแปลงอะไรเลย
อิบราฮิม Amer

4
@IbrahimAmer เคอร์เซอร์ของคุณต้องอยู่ในโปรแกรมแก้ไขแบบสอบถามเพื่อให้ตัวเลือกเมนู Intellisense พร้อมใช้งาน หากไม่มีตัวเลือกเมนู Intellisense ทางลัดจะไม่ทำอะไรเลย
Rachael

18

ในกรณีของฉันแคช IntelliSense กำลังแสดงรายการข้อมูลวัตถุสำหรับฐานข้อมูลที่แตกต่างกันโดยสิ้นเชิง ถ้าฉันคลิกปุ่ม "แบบสอบถามใหม่" ใน SSMS มันจะเปิดแบบสอบถามไปยังแค็ตตาล็อกเริ่มต้นของฉันบนเซิร์ฟเวอร์และตัวแก้ไขแบบสอบถามนั้นจะใช้ฐานข้อมูลนั้นเสมอ การรีเฟรชแคชไม่ได้เปลี่ยนแปลงอะไรเลย การรีสตาร์ท SSMS ไม่ได้เปลี่ยนแปลงอะไรเลย การเปลี่ยนแปลงฐานข้อมูลไม่ได้เปลี่ยนแปลงอะไรเลย

ฉันสิ้นสุดการสร้างแบบสอบถามโดยคลิกขวาที่ฐานข้อมูลที่ฉันต้องการใช้และเลือก "New Query" จากเมนูบริบทนั้น ตอนนี้ SSMS ใช้วัตถุที่ถูกต้องสำหรับ IntelliSense


3
นี่เป็นกรณีของฉันด้วย ขอบคุณสำหรับการแบ่งปัน.
Behrooz Karjoo

1
ใช้ datbaseName GO ก่อนการสืบค้นใช้งานได้ในการตั้งค่าบริบท
Behrooz Karjoo

@BehroozKarjoo ใช่ฉันลองแล้ว ดูเหมือนจะไม่ได้ผลเสมอไป หากฉันสามารถสร้างมันขึ้นมาใหม่ได้ฉันจะนำมันไปไว้ใน Microsoft Connect หรืออะไรบางอย่าง ฉันแน่ใจว่าพวกเขาต้องการทำเครื่องหมายเป็น WONTFIX หรือสิ่งที่น่ารำคาญเท่ากัน แต่ฉันจะรายงาน
เบคอน Bits

ทำงานได้สมบูรณ์แบบ! ขอบคุณ! :)
ฌอน Stayns

เริ่ม SSMS ใหม่และคลิกขวาแบบสอบถามใหม่ที่ทำงานให้ฉัน
ฮิต

10

คุณแน่ใจหรือว่าตารางที่เป็นปัญหามีอยู่จริง

คุณรีเฟรชมุมมองตารางใน Object Explorer หรือไม่ ซึ่งสามารถทำได้โดยคลิกขวา "ตาราง" โฟลเดอร์และกดF5คีย์

คุณอาจต้องทำการแคช Intellisense ใหม่อีกครั้ง

ซึ่งสามารถทำได้โดยทำตามเส้นทางเมนู: แก้ไข -> IntelliSense -> รีเฟรชแคชในเครื่อง


7

ทางออกคือ:

  • คลิกเมนูแบบสอบถาม
  • จากนั้นคลิก 'เปลี่ยนฐานข้อมูล'
  • เลือกชื่อฐานข้อมูลที่เหมาะสม

แค่นั้นแหละ.


6

ปัญหาเดียวกันกับฉันเมื่อฉันใช้ปัญหาไวยากรณ์นี้ได้รับการแก้ไข

ไวยากรณ์:

Use [YourDatabaseName]
Your Query Here

4

แม้หลังจากติดตั้ง SP3 ไปยัง SQL Server 2008 Enterprise แล้วปัญหานี้ยังคงเป็น "ปัญหา" Ctrl+ Shift+ Rเหมือนทุกคนได้รับการพูดแก้ปัญหานี้สำหรับฉัน


ฉันไม่ได้มีคุณสมบัตินี้ ... เมื่อฉันกด ctrl + shift + R ไม่มีการเปลี่ยนแปลงอะไรเลย
อิบราฮิม Amer

@IbrahimAmer เคอร์เซอร์ของคุณต้องอยู่ในโปรแกรมแก้ไขแบบสอบถามเพื่อให้ตัวเลือกเมนู Intellisense พร้อมใช้งาน หากไม่มีตัวเลือกเมนู Intellisense ทางลัดจะไม่ทำอะไรเลย
Rachael

3

แก้ไขสำหรับ SSMS 2016

พบปัญหาที่คล้ายกัน แต่ Intellisense ไม่ได้อยู่ในเมนูแก้ไข

สิ่งที่ดูเหมือนจะแก้ไขก็คือการเปิดและปิด Intellisens คลิกขวาบนตัวแก้ไข SQL และคลิก 'เปิดใช้งาน Intellisense' คลิกขวาที่ 'Intellisense Enabled' อีกครั้งเพื่อเปิดอีกครั้ง กะรัต Q ฉันก็ทำเช่นนี้

วิธีนี้ช่วยแก้ไขปัญหาและฉันก็รู้ว่าได้รับ Intellisense ในเมนูแก้ไข



1

คุณลอง: คลิกขวาที่ฐานข้อมูลและคลิก "รีเฟรช"


ใช่ฉันได้ลองแล้วฉันแน่ใจว่ามันอยู่ที่นั่นฉันสามารถเพิ่มบันทึกและแก้ไข ฯลฯ ได้เพียงเลือก * จาก dbo.Room และในขณะที่ฉันยังคงขีดเส้นใต้เอาท์พุทเนื้อหาของตาราง ฉันจะลองรีบูตเครื่อง
Richbits

1

ฉันรู้ว่าคำถามนี้ได้รับการตอบแล้ว แต่ฉันมีทางออกที่แตกต่าง:

หากคุณกำลังเขียนสคริปต์ที่คุณวางตารางโดยไม่สร้างใหม่ตารางเหล่านั้นจะแสดงว่าหายไปหากคุณพยายามอ้างอิงในภายหลัง

หมายเหตุ: สิ่งนี้จะไม่เกิดขึ้นกับสคริปต์ที่ทำงานอยู่ตลอดเวลา แต่บางครั้งก็ง่ายกว่าที่จะมีสคริปต์ที่มีคำสั่งให้แสดงซ้ำกว่าพิมพ์ทุกครั้ง


0

ฉันพบปัญหากับ: ODBC และ SQL-Server-Authentication ใน ODBC และ Firedac-Connection

วิธีแก้ไข: ฉันต้องตั้งค่า Param MetaDefSchema เป็นชื่อผู้ใช้ sqlserver: FDConnection1.Params.AddPair ('MetaDefSchema', self.FDConnection1.Params.UserName);

wikidoc sais: MetaDefSchema = ชื่อสกีมาเริ่มต้น รหัสเวลาออกแบบ >> ไม่รวม << !! ชื่อสกีมาจากวัตถุ SQL-Server-Authenticatoinname หากมีค่าเท่ากับ MetaDefSchema

coder อัตโนมัติสร้าง: dbname.username.tablename -> ชื่อวัตถุที่ไม่ถูกต้อง

ด้วยการตั้งค่า MetaDefSchema เป็น sqlserver-username: dbname.tablename -> works!

ดู embarcadero-doc ได้ที่: http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_SQL_Server_(FireDAC)

หวังว่าจะช่วยคนอื่น ..

ขอแสดงความนับถือ Lutz


0

ใน azure data studio กด "cmd + shift + p" และพิมพ์ "intellisense" จากนั้นคุณจะเห็นตัวเลือกในการรีเฟรชแคช intellisense


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.