Tên đối tượng máy chủ sql không hợp lệ - nhưng các bảng được liệt kê trong danh sách bảng SSMS


335

Tôi đang cố gắng tạo một Stored Procedurecơ sở dữ liệu mới được tạo. Tuy nhiên, SSMSintellisense không nhận ra hơn một nửa số bảng đã được tạo.

Ví dụ: trong khi ở cột bên trái bên dưới các bảng tôi có một bảng dbo.Room, khi tôi nhập " dbo." trong cửa sổ truy vấn mới, bảng đó không được liệt kê, thực tế chỉ có 17 trong số 37 bảng được liệt kê.

Tôi có thể thấy không có sự khác biệt giữa các bảng được liệt kê bởi intellisense và các bảng không. Nếu tôi nhập thủ công dbo.Room, nó được gạch chân, có lỗi là

Tên đối tượng không hợp lệ 'dbo.Room' ..

Tôi đã bỏ lỡ một cái gì đó trong việc thiết lập các bảng?

CẬP NHẬT: Tôi đã thử làm mới danh sách bảng (nhiều lần)


11
Trả lời rằng hoạt động: [DatabaseName].[Schema].[TableName] SO: Tên đối tượng không hợp lệ sql
Ivan Chau

Câu trả lời:


703

Thử:

Edit-> IntelliSense->Refresh Local Cache

Điều này sẽ làm mới dữ liệu được lưu trong bộ nhớ cache của Intellisense để cung cấp hỗ trợ đánh máy và phát hiện lỗi trước khi thực hiện.

LƯU Ý: Con trỏ của bạn phải nằm trong trình chỉnh sửa truy vấn để menu IntelliSense hiển thị.


8
Intellisense / SSMS có tự làm mới định kỳ không? Hoặc phải luôn luôn là một quá trình thủ công? (Tôi đã đoán được dựa trên SSMS vào năm 2005, nhưng người ta luôn có thể hy vọng.)
Philip Kelley

37
không thể tin được rằng vào năm 2012 bạn cần phải làm điều này. Họ không thể tự động cập nhật Intellisense cứ sau vài giây?
Khóa Matthew

6
Điều đó có thể yêu cầu nhấn cơ sở dữ liệu và kéo các định nghĩa bảng / xem mỗi vài giây.
jinglểula

8
LƯU Ý: Con trỏ của bạn phải nằm trong trình chỉnh sửa truy vấn để menu IntelliSense hiển thị.
bradlis7

5
@ Kinhleraula: Điều đó sẽ giúp tôi tiết kiệm được máy chủ cơ sở dữ liệu!
Paul

80

Ctrl+ Shift+ Rlàm mới intellisense trong quản lý studio 2008 là tốt.


Tôi không có tính năng này ... khi tôi nhấn ctrl + shift + R không có gì thay đổi
Ibrahim Amer

4
@IbrahimAmer Con trỏ của bạn phải nằm trong trình chỉnh sửa truy vấn để có sẵn tùy chọn menu Intellisense. Nếu tùy chọn menu intellisense không có sẵn, phím tắt sẽ không làm gì cả.
Rachael

Nó cũng hoạt động cho T-SQL trong SQL Server Management Studio 2014
Vahid Amiri

44

Hãy chắc chắn rằng DB được chọn là nơi đặt bảng. Tôi đang chạy Script Master. Trong trường hợp của tôi, tôi đã phải chuyển sang hr_db.

nhập mô tả hình ảnh ở đây

Rookie sai lầm, nhưng có thể giúp ai đó.


4
Tôi không chắc chắn đó là một sai lầm tân binh thành thật, vì bất cứ khi nào bạn kết nối lại máy chủ, vì một số lý do, chuyển sang "chủ" không có lý do rõ ràng. :)
Chris Rae

Nếu đó là trường hợp và truy vấn không đủ điều kiện tên bảng, mã sẽ không thực thi. Tôi tin rằng OP đã mô tả phát hiện lỗi dương tính giả khi sự cố bạn mô tả không phải là yếu tố góp phần. (Chắc chắn, tôi đã loại trừ khả năng khi tôi đi tìm kiếm và tìm kiếm ở đây.)
Dodecaphone

Chính xác là vấn đề của tôi. Không có dấu hiệu nào từ SMS rằng nó đã thay đổi bối cảnh cơ sở dữ liệu hoặc bất kỳ manh mối nào khác.
Daniel Black

1
@ChrisRae: Đó là vì masterđược đặt làm cơ sở dữ liệu mặc định cho đăng nhập người dùng của bạn. Chỉ cần thay đổi sử dụng sp_defaultdbsang cơ sở dữ liệu khác để chọn cơ sở dữ liệu khác trong SSMS khi bạn đăng nhập. (Cũng có thể được đặt trong SSMS trước Security > Logins > your user login > Properties > Default database)
AxD

36

một khi bạn tạo một đối tượng SQL Server mới, đối tượng mới được tạo của bạn sẽ không được cập nhật trong IntelliSence Local Cache và do đó, nó hiển thị đường màu đỏ bên dưới đối tượng đó. Vì vậy, bạn chỉ cần làm mới SSMS IntelliSence Local Cache và một khi bạn làm mới nó, IntelliSencesẽ tự động thêm đối tượng mới được tạo vào bộ đệm và dòng màu đỏ sẽ biến mất. thử cái này

Edit -> IntelliSense -> Refresh Local Cache hoặc Ctrl+ Shift+R

nhập mô tả hình ảnh ở đây


1
Tôi không có tính năng này ... khi tôi nhấn ctrl + shift + R không có gì thay đổi
Ibrahim Amer

4
@IbrahimAmer Con trỏ của bạn phải nằm trong trình chỉnh sửa truy vấn để có sẵn tùy chọn menu Intellisense. Nếu tùy chọn menu intellisense không có sẵn, phím tắt sẽ không làm gì cả.
Rachael

18

Trong trường hợp của tôi, bộ đệm IntelliSense đã liệt kê thông tin đối tượng cho một cơ sở dữ liệu hoàn toàn khác. Nếu tôi nhấp vào nút "Truy vấn mới" trong SSMS, nó sẽ mở một truy vấn đến danh mục mặc định của tôi trên máy chủ và trình soạn thảo truy vấn đó sẽ luôn chỉ sử dụng cơ sở dữ liệu đó. Làm mới bộ đệm không thay đổi bất cứ điều gì. Khởi động lại SSMS không thay đổi bất cứ điều gì. Thay đổi cơ sở dữ liệu không thay đổi bất cứ điều gì.

Tôi đã kết thúc việc tạo một truy vấn bằng cách nhấp chuột phải vào cơ sở dữ liệu mà tôi thực sự muốn sử dụng và chọn "Truy vấn mới" từ menu ngữ cảnh đó. Bây giờ SSMS sử dụng các đối tượng chính xác cho IntelliSense.


3
Đây cũng là trường hợp của tôi. Cám ơn vì đã chia sẻ.
Behrooz Karjoo 6/07/2015

1
USE datbaseName GO trước khi truy vấn cũng hoạt động trong việc thiết lập bối cảnh
Behrooz Karjoo 13/07/2015

@BehroozKarjoo Vâng, tôi đã thử nó. Nó dường như không luôn luôn hoạt động. Nếu tôi có thể sao chép nó, tôi sẽ đặt nó trên Microsoft Connect hoặc một cái gì đó. Tôi chắc chắn họ sẽ đánh dấu nó là WONTFIX hoặc một cái gì đó gây khó chịu không kém, nhưng tôi sẽ báo cáo nó.
Bacon Bits

Làm việc hoàn hảo! Cảm ơn bạn! :)
Sean Ở lại

Khởi động lại SSMS và nhấp chuột phải vào truy vấn mới làm việc cho tôi.
Số lượt truy cập

10

Bạn có chắc chắn rằng bảng trong câu hỏi tồn tại?

Bạn đã làm mới chế độ xem bảng trong Object Explorer chưa? Điều này có thể được thực hiện bằng cách nhấp chuột phải vào thư mục "bảng" và bấm F5phím.

Bạn cũng có thể cần phải chạy lại bộ đệm Intellisense.

Điều này có thể được thực hiện bằng cách làm theo lộ trình menu: Chỉnh sửa -> IntelliSense -> Làm mới Bộ đệm ẩn cục bộ


7

Giải pháp là:

  • Nhấp vào menu Truy vấn,
  • sau đó nhấp vào 'Thay đổi cơ sở dữ liệu'.
  • Chọn tên cơ sở dữ liệu thích hợp của bạn.

Đó là nó.


6

Vấn đề tương tự với tôi khi tôi sử dụng vấn đề cú pháp này được giải quyết.

Cú pháp:

Use [YourDatabaseName]
Your Query Here

4

Ngay cả sau khi cài đặt SP3 lên SQL Server 2008 Enterprise, đây vẫn là một "vấn đề". Ctrl+ Shift+ Rnhư mọi người đã nói giải quyết vấn đề này cho tôi.


Tôi không có tính năng này ... khi tôi nhấn ctrl + shift + R không có gì thay đổi
Ibrahim Amer

@IbrahimAmer Con trỏ của bạn phải nằm trong trình chỉnh sửa truy vấn để có sẵn tùy chọn menu Intellisense. Nếu tùy chọn menu intellisense không có sẵn, phím tắt sẽ không làm gì cả.
Rachael

3

Đã giải quyết cho SSMS 2016.

Có một vấn đề tương tự, nhưng Intellisense không có trong menu Chỉnh sửa.

Điều có vẻ như đã khắc phục nó là bật và tắt Intellisens, nhấp chuột phải vào trình soạn thảo SQL và nhấp vào 'Intellisense En bật'. Nhấp chuột phải lần nữa vào 'Intellisense En bật' để bật lại. Ctr Q, tôi cũng làm điều này.

Điều này đã giải quyết được vấn đề và tôi cũng biết lấy Intellisense trên menu Chỉnh sửa.


2

Tôi chỉ cần đóng SMSS và mở lại nó. Tôi đã thử làm mới Cache cục bộ và nó không hoạt động.


1

bạn đã thử chưa: nhấp chuột phải vào cơ sở dữ liệu và nhấp vào "refresh"


Vâng, tôi đã thử điều đó, tôi chắc chắn rằng nó ở đó, tôi có thể thêm các bản ghi và sửa đổi, v.v.Chỉ cần chọn * từ dbo.Room và trong khi tôi vẫn có phần gạch chân xuất ra nội dung của bảng. Tôi sẽ thử khởi động lại.
Richbits

1

Tôi nhận ra câu hỏi này đã được trả lời, tuy nhiên, tôi đã có một giải pháp khác:

Nếu bạn đang viết một tập lệnh trong đó bạn thả các bảng mà không tạo lại chúng, các bảng đó sẽ hiển thị là thiếu nếu bạn cố gắng tham chiếu chúng sau này.

Lưu ý: Điều này sẽ không xảy ra với một tập lệnh được chạy liên tục, nhưng đôi khi việc có một tập lệnh với các truy vấn sẽ dễ dàng hơn so với việc nhập chúng vào mọi lúc.


0

Tôi gặp vấn đề với: ODBC và SQL-Server-xác thực trong ODBC và Firedac-Connection

Giải pháp: Tôi đã phải đặt Param MetaDefSchema thành tên người dùng sqlserver: FDConnection1.Params.AddPair ('MetaDefSchema', self.FDConnection1.Params.UserName);

Các wikidoc sais: MetaDefSchema = Tên lược đồ mặc định. Mã thời gian thiết kế >> không bao gồm << !! tên lược đồ từ đối tượng SQL-Server-Authenticatoinname nếu nó bằng với MetaDefSchema.

không cần cài đặt, bộ mã hóa tự động sẽ tạo: dbname.username.tablename -> tên đối tượng không hợp lệ

Với việc đặt MetaDefSchema thành tên người dùng sqlserver: dbname.tablename -> hoạt động!

Xem thêm embarcadero-doc tại: http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_Query_Server_(FireDAC)

Hy vọng, nó sẽ giúp người khác ..

liên quan, Lutz


0

Trong studio dữ liệu azure, nhấn "cmd + shift + p" và gõ "intellisense", sau đó bạn sẽ thấy một tùy chọn để làm mới bộ đệm intellisense.


0

Đừng quên tạo di chuyển của bạn sau khi viết mô hình

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.