web-dev-qa-db-ja.com

VS 2012データベースプロジェクト「オブジェクトへの未解決の参照」エラー

VS 2012でSQL Serverデータベースプロジェクトを作成し、データベースをインポートしました。プロジェクトをビルドすると、多くの「オブジェクトへの未解決の参照」エラーが発生します。これらのエラーは、データベースにあるいくつかのビューにのみ発生します。これらのビューの構文は正しいため、一時テーブルを使用していません。この問題を解決するには何をチェックすればよいですか?

更新:これは一例です:

    CREATE view [Factory].[NonStartedOrders]
as
 SELECT 

"Customers"."CustomerName", "Customers"."CustomerAName",
"Customers"."MarketID",
"Orders"."OrderID", 
"Orders"."ApproveDate", 
"FactoryOrders"."FactoryID", 
"FactoryOrders"."EstEndDate", 
"FactoryOrders"."StatusID", 
"FactoryOrders"."TotalWeight", 
"Karats"."KaratEName"

FROM   (("Taiba"."Sales"."FactoryOrders" "FactoryOrders" 
INNER JOIN "Taiba"."Sales"."Orders" "Orders" ON "FactoryOrders"."OrderID"="Orders"."OrderID") 
INNER JOIN "Taiba"."General"."Customers" "Customers" ON "Orders"."CustomerID"="Customers"."CustomerID") 
INNER JOIN "Taiba"."MasterPiece"."Karats" "Karats" ON "Orders"."MKaratID"="Karats"."KaratID"

ここの「タイバ」は私のデータベース名です。このビューでのみ30個のエラーが表示されます。これらはいくつかのエラーです。

Error   217 SQL71561: View: [Factory].[NonStartedOrders] has an unresolved reference to object [Taiba].[Sales].[FactoryOrders]

Error   219 SQL71561: View: [Factory].[NonStartedOrders] contains an unresolved reference to an object. Either the object does not exist or the reference is ambiguous because it could refer to any of the following objects: [Taiba].[Sales].[FactoryOrders].[FactoryOrders]::[OrderID], [Taiba].[Sales].[FactoryOrders].[OrderID] or [Taiba].[Sales].[Orders].[FactoryOrders]::[OrderID].
36
Adel Khayata

この問題を解決しました。

私のビュー/ SPのいくつかは、この命名規則を使用してテーブルを参照しているようです(3つの部分の修飾名):

DatabaseName.SchemaName.TableName

すべての参照を次のように変更しました。

SchemaName.TableName

23
Adel Khayata

もう1つの可能性は、ビュー/テーブルなどで使用したスキーマがプロジェクトに存在しないことです。 VSデータベースプロジェクトにスキーマを追加する必要がある場合があります。

プロジェクトを右クリックし、Add > New Item > Schema

41
Gwasshoppa

私の場合、見つからなかった関数はBuild Action = Noneであったため、コンパイルに含まれていませんでした。

ビルドアクションをBuildに変更すると、これが修正されました。

14
fiat

これは、Visual Studio 2015でCTEをビルドするときに起こりました。ビルドアクションをコンパイルに変更すると、エラーはなくなりました。

  1. エラーのあるファイルを選択します
  2. F4を押してプロパティを表示します。
  3. [ビルドアクション]ドロップダウンリストで[コンパイル]を選択します。

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

8
ClarenceG

オブジェクトがプロジェクトファイル内のNotInBuildタグ内にあり、名前付けなどの問題がある可能性があります。私の場合、.. sqlでファイルを保存すると、余分なドットが原因でプロジェクトファイル内のNotInBuildタグの下に移動しました。拡張機能を修正し、不足しているオブジェクトをビルドタグの下に移動すると、問題が解決しました。

1
Nilanjan Pal

これはEdgeの場合かもしれませんが、オブジェクト定義でsp_addextendedpropertyを使用してオブジェクトを文書化している場合(とにかく...)、間違ったオブジェクトタイプを指定した場合にこのエラーが発生する可能性があります貼り付けます。ここでは、「オブジェクトへの未解決の参照」エラーについて考えたときに意味があります。

たとえば、level1typeは「FUNCTION」ではなく「PROCEDURE」である必要があるため、次の例ではエラーが再作成されます。

EXEC sp_addextendedproperty
  @name = N'MS_Description',
  @value = N'Description of the stored procedure...',
  @level0type = N'SCHEMA',
  @level0name = N'dbo',
  @level1type = FUNCTION',
  @level1name = N'spMyStoredProcedureName'
GO
0

クラスを明示的に定義してみてください:

class:許可が付与されているセキュリティ保護可能なクラスを指定します。スコープ修飾子::は必須です。

SQL GRANTステートメントに関するドキュメントを読む: http://technet.Microsoft.com/en-us/library/ms187965.aspx

私の場合、ユーザー定義のテーブルタイプがありました。

GRANT EXECUTE ON TYPE::[dbo].[MessageTableType] TO [PostOffice_Role];
0
superlogical

また、テーブルを追加するとき(.sqlファイルを使用)、および.sqlprojファイルをチェックインしない場合にもこのエラーが発生します。

0
Dev