web-dev-qa-db-ja.com

オブジェクト[INFORMATION_SCHEMA]への未解決の参照。[TABLES]

[INFORMATION_SCHEMA].[TABLES]ビューにアクセスするUDFを作成しました。

CREATE FUNCTION [dbo].[CountTables]
(
    @name sysname
)
RETURNS INT
AS
BEGIN
    RETURN
    (
        SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @name
    );
END

Visual Studio内では、ビューのスキーマと名前の両方に警告のマークが付いています。

SQL71502:関数:[dbo]。[CountTables]には、オブジェクト[INFORMATION_SCHEMA]。[TABLES]への未解決の参照があります。

問題なくデータベースプロジェクトを公開できますが、UDFは正しく実行されているようです。 IntelliSenseがビューの名前を自動的に入力するため、問題はないようです。

また、このビューの代わりにsys.objectsを使用するように実装を変更しようとしましたが、このビューにも同じ警告が表示されました。

この警告を解決するにはどうすればよいですか?

88
Sam

データベース参照をmasterに追加します。

  1. プロジェクトの下で、右クリックReferences
  2. データベース参照を追加...を選択します。
  3. システムデータベースを選択します。
  4. masterが選択されていることを確認します。
  5. OKを押します。

VSの更新には時間がかかる場合があることに注意してください。

159
Sam

このプロジェクトでは、マスターへの参照が既にありますが、この問題がありました。以下がエラーです。

SQL71502: Procedure: [Schema].[StoredProc1] has an unresolved reference to object [Schema].[Table1].[Property1].

参照エラーを解決するには、テーブルsqlファイルでプロパティを右クリックし、BuildSettingsがBuildに設定されていることを確認します。

ビルドを変更すると修正されました。

3
Russell D

サムが言ったことはこれを行うための最良の方法です。
ただし、その特定の場所にその参照がないマシンからdacpacを展開する必要があるシナリオがある場合、問題が発生する可能性があります。別の方法は、.projectファイルを開き、実行しようとしているビルド構成の次のタグの値がfalseであることを確認することです。

<TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>

このように、プロジェクトに参照を追加する必要はありません。

2
tecfield