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].
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
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
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.
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.
J'espère que ça aide quelqu'un.
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.
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
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];
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.