web-dev-qa-db-fra.com

Projet de base de données VS 2012 "référence non résolue à l'objet" Erreur

J'ai créé le projet de base de données SQL Server dans VS 2012 et importé notre base de données . Lorsque je construis le projet, je reçois beaucoup de "références non résolues à l'objet" Erreurs . Ces erreurs ne concernent que quelques vues ma base de données . La syntaxe pour ces vues est correcte et je n'utilise pas de tables temporaires . Que dois-je vérifier pour résoudre ce problème?

UPDATE: Voici un exemple:

    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"

"Taiba", voici le nom de ma base de données . Je reçois 30 erreurs uniquement pour cette vue . Voici quelques erreurs:

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].
35
Adel Khayata

J'ai résolu ce problème.

Il semble que quelques-uns de mes points de vue/SP aient référencé les tables en utilisant cette convention d'appellation (nom qualifié en 3 parties):

DatabaseName.SchemaName.TableName

J'ai changé toutes les références pour être comme suit:

SchemaName.TableName

21
Adel Khayata

Une autre possibilité est que le schéma que vous avez utilisé dans votre vue/table, etc. n'existe pas dans le projet. Vous devrez peut-être ajouter le schéma au projet de base de données VS.

Clic droit sur le projet et Add > New Item > Schema

38
Gwasshoppa

Dans mon cas, la fonction introuvable était celle de Build Action = None et elle n'a donc pas été incluse dans la compilation.

Modification de l'action de construction en Build corrigé cela.

13
fiat

C'est ce qui m'est arrivé lors de la création d'un CTE dans Visual Studio 2015. J'ai modifié l'action Build en Compile et les erreurs ont disparu.

  1. Sélectionnez le (s) fichier (s) avec l'erreur
  2. Appuyez sur F4 pour voir les propriétés.
  3. Sélectionnez 'Compiler' dans la liste déroulante Action de construction.

J'espère que ça aide quelqu'un.

6
ClarenceG

Il est possible que les objets se trouvent dans NotInBuild tag dans le fichier de projet pour nommer ou pour tout autre problème. Dans mon cas, j'ai sauvegardé le fichier avec .sql et le point supplémentaire le faisait se déplacer sous la balise NotInBuild dans le fichier de projet. J'ai corrigé l'extension et déplacé l'objet manquant sous la balise de construction et cela a résolu le problème.

1
Nilanjan Pal

Cela peut être un cas Edge, mais si dans votre définition d'objet, vous documentez également l'objet (nous le faisons en tout cas ...) à l'aide de sp_addextendedproperty, vous pouvez également obtenir cette erreur si vous avez indiqué un type d'objet incorrect coller. L'erreur "référence non résolue à l'objet" prend tout son sens lorsque vous y réfléchissez.

Par exemple, ce qui suit va recréer l'erreur car le type level1 devrait être 'PROCEDURE' et non 'FUNCTION'.

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
Fetchez la vache

Essayez de définir explicitement la classe:

class: Spécifie la classe de l'objet sécurisable sur lequel l'autorisation est en cours accordé. Le qualificatif de portée :: est requis.

Lisez la documentation sur l'instruction SQL GRANT: http://technet.Microsoft.com/en-us/library/ms187965.aspx

Dans mon cas, j'avais un type de table défini par l'utilisateur.

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

Vous obtiendrez également cette erreur lorsque vous ajoutez une table (à l'aide d'un fichier .sql) et si vous n'archivez pas le fichier .sqlproj.

0
Dev