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].
この問題を解決しました。
私のビュー/ SPのいくつかは、この命名規則を使用してテーブルを参照しているようです(3つの部分の修飾名):
DatabaseName.SchemaName.TableName
すべての参照を次のように変更しました。
SchemaName.TableName
もう1つの可能性は、ビュー/テーブルなどで使用したスキーマがプロジェクトに存在しないことです。 VSデータベースプロジェクトにスキーマを追加する必要がある場合があります。
プロジェクトを右クリックし、Add > New Item > Schema
私の場合、見つからなかった関数はBuild Action = Noneであったため、コンパイルに含まれていませんでした。
ビルドアクションをBuildに変更すると、これが修正されました。
これは、Visual Studio 2015でCTEをビルドするときに起こりました。ビルドアクションをコンパイルに変更すると、エラーはなくなりました。
これが誰かを助けることを願っています。
オブジェクトがプロジェクトファイル内のNotInBuildタグ内にあり、名前付けなどの問題がある可能性があります。私の場合、.. sqlでファイルを保存すると、余分なドットが原因でプロジェクトファイル内のNotInBuildタグの下に移動しました。拡張機能を修正し、不足しているオブジェクトをビルドタグの下に移動すると、問題が解決しました。
これは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
クラスを明示的に定義してみてください:
class:許可が付与されているセキュリティ保護可能なクラスを指定します。スコープ修飾子::は必須です。
SQL GRANT
ステートメントに関するドキュメントを読む: http://technet.Microsoft.com/en-us/library/ms187965.aspx
私の場合、ユーザー定義のテーブルタイプがありました。
GRANT EXECUTE ON TYPE::[dbo].[MessageTableType] TO [PostOffice_Role];
また、テーブルを追加するとき(.sqlファイルを使用)、および.sqlprojファイルをチェックインしない場合にもこのエラーが発生します。