SQL Serverの無効なオブジェクト名-テーブルはSSMSテーブルリストにリストされています


335

Stored Procedure新しく作成したデータベースのを作成しようとしています。ただし、SSMSインテリセンスは作成されたテーブルの半分以上を認識しません。

たとえば、テーブルの下の左側の列にテーブルがありますが、新しいクエリウィンドウでdbo.Roomdbo.」と入力すると、そのテーブルは表示されません。実際には、37のテーブルのうち17のみが表示されます。

intellisenseによって一覧表示されるテーブルとそうでないテーブルの間に違いはありません。手動でdbo.Roomと入力すると、下線が付き、エラー

無効なオブジェクト名 'dbo.Room' ..

テーブルのセットアップで何かを見逃しましたか?

更新:テーブルリストの更新を試みました(数回)


11
有効な回答:[DatabaseName].[Schema].[TableName] SO:Invalid Object Name sql
Ivan Chau

回答:


703

試してください:

Edit-> IntelliSense->Refresh Local Cache

これにより、Intellisenseによってキャッシュされたデータが更新され、先行入力サポートと実行前エラー検出が提供されます。

注:IntelliSenseメニューを表示するには、カーソルがクエリエディター内にある必要があります。


8
Intellisense / SSMSは定期的に更新されますか?それとも、これは常に手動プロセスでなければなりませんか?(2005年のSSMSに基づいて推測しましたが、いつでも希望できます。)
フィリップケリー

37
2012年にはこれを行う必要があるとは信じられません。Intellisenseを数秒ごとに自動的に更新できませんでしたか?
マシューロック

6
そのためには、データベースにアクセスして、数秒ごとにテーブル/ビューの定義を取得する必要があります。
jinglesthula

8
注:IntelliSenseメニューを表示するには、カーソルがクエリエディター内にある必要があります。
bradlis7 14

5
@jinglesthula:救う私を、データベース・サーバーをヒット!
Paul

80

Ctrl+ Shift+ Rは、management studio 2008でもIntelliSenseを更新します。


私はこの機能を持っていません... Ctrl + Shift + Rを押しても何も変わりません
Ibrahim Amer

4
@IbrahimAmer Intellisenseメニューオプションを使用するには、カーソルがクエリエディタ内にある必要があります。インテリセンスメニューオプションが使用できない場合、ショートカットは何もしません。
Rachael

SQL Server Management Studio 2014のT-SQLでも機能します
Vahid Amiri

44

選択したDBがテーブルがあるDBであることを確認してください。でスクリプトを実行していましたMaster。私の場合、に切り替えなければなりませんでしたhr_db

ここに画像の説明を入力してください

ルーキーミスは、しかし、誰かを助けることができました。


4
なんらかの理由でサーバーに再接続するたびに、明らかな理由もなく「マスター」に切り替わるので、正直に言うとそれが新人の間違いかどうかはわかりません。:)
Chris Rae

その場合、クエリがテーブル名を完全に修飾しないと、コードは実行されません。OPは、あなたが説明した問題が原因となる要因ではなかったときに、誤検知によるエラー検出を説明していたと思います。(確かに、私が探しに行ってここに
巻き込ん

まさに私の問題です。SMSから、データベースコンテキストが変更されたかどうか、またはその他の手がかりが示されたことはありません。
ダニエルブラック

1
@ChrisRae:これmasterは、がユーザーログインのデフォルトデータベースとして設定されているためです。sp_defaultdbログイン時にSSMSで他のデータベースが選択されるように、それを別のデータベースに変更するだけです(SSMSでもで設定できますSecurity > Logins > your user login > Properties > Default database
AxD

36

新しいSQL Serverオブジェクトを作成すると、新しく作成されたオブジェクトはIntelliSenceローカルキャッシュで更新されません。そのため、そのオブジェクトの下に赤い線が表示されます。したがって、SSMS IntelliSenceローカルキャッシュを更新するだけで、更新すると、IntelliSence新しく作成されたオブジェクトが自動的にキャッシュに追加され、赤い線が消えます。これを試して

Edit -> IntelliSense -> Refresh Local Cache または Ctrl+ Shift+R

ここに画像の説明を入力してください


1
私はこの機能を持っていません... Ctrl + Shift + Rを押しても何も変化しません
Ibrahim Amer

4
@IbrahimAmer Intellisenseメニューオプションを使用するには、カーソルがクエリエディタ内にある必要があります。インテリセンスメニューオプションが使用できない場合、ショートカットは何もしません。
Rachael

18

私の場合、IntelliSenseキャッシュは完全に異なるデータベースのオブジェクト情報をリストしていました。SSMSで[新しいクエリ]ボタンをクリックすると、サーバー上のデフォルトのカタログへのクエリが開かれ、そのクエリエディターは常にそのデータベースのみを使用します。キャッシュを更新しても何も変わりませんでした。SSMSを再起動しても何も変わりませんでした。データベースを変更しても何も変わりませんでした。

実際に使用したいデータベースを右クリックし、そのコンテキストメニューから[新しいクエリ]を選択して、クエリを作成しました。 これで、 SSMSはIntelliSenseの正しいオブジェクトを使用します。


3
これも私の場合でした。共有いただきありがとうございます。
Behrooz Karjoo

1
クエリの前にdatbaseName GOを使用すると、コンテキストの設定でも機能します
Behrooz Karjoo 2015

@BehroozKarjooええ、私はそれを試しました。常に機能するとは限りません。再現できたらMicrosoft Connectなどに載せます。彼らはそれをWONTFIXまたは同様に刺激的なものとしてマークすると確信していますが、私はそれを報告します。
ベーコンビット

完璧に働いた!ありがとうございました!:)
ショーンステインズ

SSMSを再起動し、右クリックで新しいクエリが機能しました。
Hitsa、

10

問題のテーブルが存在することを確信していますか?

オブジェクトエクスプローラーのテーブルビューを更新しましたか?これは、「テーブル」フォルダを右クリックしてF5キーを押すことで実行できます。

Intellisenseキャッシュを再構築する必要がある場合もあります。

これは、次のメニュールートで実行できます:[編集]-> [IntelliSense]-> [ローカルキャッシュを更新]


7

解決策は次のとおりです。

  • メニューのクエリをクリックし、
  • 次に、「データベースの変更」をクリックします。
  • 適切なデータベース名を選択します。

それでおしまい。


6

私がこの構文問題を使用したときと同じ問題が解決しました。

構文:

Use [YourDatabaseName]
Your Query Here

4

SQL Server 2008 EnterpriseにSP3をインストールした後でも、これはまだ「問題」です。Ctrl+ Shift+ Rみんながこの問題を解決したと言ってきたように。


私はこの機能を持っていません... Ctrl + Shift + Rを押しても何も変化しません
Ibrahim Amer

@IbrahimAmer Intellisenseメニューオプションを使用するには、カーソルがクエリエディタ内にある必要があります。インテリセンスメニューオプションが使用できない場合、ショートカットは何もしません。
Rachael、2015年

3

SSMS 2016で解決されました。

同様の問題がありましたが、Intellisenseは[編集]メニューにありませんでした。

それを修正しているように見えたのは、Intellisensのオンとオフを切り替えることでした。SQLエディターを右クリックして、[Intellisense Enabled]をクリックします。[Intellisense Enabled]をもう一度右クリックして、再びオンにします。Ctr Q、私もこれを行います。

これで問題が解決しました。また、編集メニューにIntellisenseが表示されることもわかっています。


2

SMSSを閉じて再度開く必要がありました。ローカルキャッシュの更新を試みましたが、うまくいきませんでした。


1

試しましたか:データベースを右クリックして、[更新]をクリックします


はい、私はそれを試しました、そこにあると確信しています、レコードを追加したり、変更したりできます。dbo.RoomからSelect *を実行しただけで、下線が引かれている間に、テーブルの内容が出力されました。再起動してみます。
リッチビット、2009

1

この質問にはすでに回答済みですが、別の解決策がありました。

再作成せずにテーブルを削除するスクリプトを作成している場合、後で参照しようとすると、それらのテーブルが欠落していると表示されます。

注:これは、常に実行されるスクリプトでは発生しませんが、スクリプトを毎回入力するよりも、再参照するクエリを含む方が簡単な場合があります。


0

ODBCとFiredac-ConnectionのODBCとSQL-Server-Authenticationで問題が発生しました

解決策:Param MetaDefSchemaをsqlserverユーザー名に設定する必要がありました:FDConnection1.Params.AddPair( 'MetaDefSchema'、self.FDConnection1.Params.UserName);

wikidoc sais:MetaDefSchema =デフォルトのスキーマ名。設計時コード>>を除く<< !! MetaDefSchemaと等しい場合は、SQL-Server-Authenticatoinnameオブジェクトからのスキーマ名。

設定しないと、自動コーダーは次を作成します:dbname.username.tablename->無効なオブジェクト名

MetaDefSchemaをsqlserver-usernameに設定すると、dbname.tablename->が機能します。

次の場所にあるembarcadero-docも参照してください。http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_SQL_Server_(FireDAC

それが他の誰かを助けることを願っています。

よろしく、ルッツ


0

Azure Data Studioで「cmd + shift + p」を押して「intellisense」と入力すると、インテリセンスキャッシュを更新するオプションが表示されます。


0

モデルを作成した後、マイグレーションを作成することを忘れないでください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.