2016-01-13 3 views
6

Je crée un nouveau CLR SQL à l'aide de Visual Studio 2013 et dans les propriétés du projet, j'ai défini le schéma par défaut sur 'decASM' (était 'dbo'). Quand je fais ce changement et reconstruire le projet VS génère un fichier sql comme suit:VS SQLCLR: La fonction X a une référence non résolue au schéma Y

-------------------------------------------------------------------------------- 
--  This code was generated by a tool. 
-- 
--  Changes to this file may cause incorrect behavior and will be lost if 
--  the code is regenerated. 
-------------------------------------------------------------------------------- 

CREATE FUNCTION [decASM].[ExecFoxPro_SayHello] (@name [nvarchar](MAX)) 
RETURNS [nvarchar](MAX) 
AS EXTERNAL NAME [dcFoxProAssy].[UserDefinedFunctions].[ExecFoxPro_SayHello]; 

GO 

CREATE FUNCTION [decASM].[GetAllowedPaths] (@serviceUrl [nvarchar](MAX)) 
RETURNS [nvarchar](MAX) 
AS EXTERNAL NAME [dcFoxProAssy].[UserDefinedFunctions].[GetAllowedPaths]; 

GO 

CREATE FUNCTION [decASM].[GetTableRowCount] (@serviceUrl [nvarchar](MAX), @foxProPath [nvarchar](MAX), @tableName [nvarchar](MAX)) 
RETURNS [nvarchar](MAX) 
AS EXTERNAL NAME [dcFoxProAssy].[UserDefinedFunctions].[GetTableRowCount]; 

GO 

Il y a une erreur à chaque appel à create fonction:

Error 1 SQL71501: Function: [decASM].[ExecFoxPro_SayHello] has an unresolved reference to Schema [decASM]. 
Error 2 SQL71501: Function: [decASM].[GetAllowedPaths] has an unresolved reference to Schema [decASM]. 
Error 3 SQL71501: Function: [decASM].[GetTableRowCount] has an unresolved reference to Schema [decASM]. 

Si je change le schéma par défaut Retour à 'dbo', le projet se construit avec succès. J'ai parcouru les propriétés du projet et Google, mais je ne trouve aucune mention sur la façon d'ajouter une référence à 'decASM'.

Répondre

13

Vous devez également créer le schéma en tant qu'objet SSDT distinct. Il ne sera pas créé automatiquement pour vous simplement en spécifiant que vous voulez l'utiliser pour vos objets SQLCLR. Vous devriez pouvoir:

  • Ajouter un nouvel élément (contrôle + Maj + A) partout à votre projet
  • Sélectionnez le modèle SQL Server>sécurité>Schéma
  • Nom du produit/fichier: decASM
  • Enregistrer un d fermer le script

Il va créer un fichier SQL séparé dans votre projet pour cela, contenant une seule commande CREATE SCHEMA [decASM] et déploiera lorsque vous publiez votre code SQLCLR.

Les étapes mentionnées ci-dessus ont fait un travail pour moi en utilisant Visual Studio 2013.

+0

dois-je créer pour exécuter le script de schéma dans la base de données, puis importer la base de données principale dans le projet SSDT? – Baahubali

+0

@ user1490835 Si votre question portait sur le schéma, je dirais que vous n'avez pas besoin de le créer dans la base de données. Mais puisque vous posez des questions sur [quelque chose en rapport avec SQLCLR] (http://stackoverflow.com/q/41055706/577765), je dirai que votre problème n'a absolument rien à voir avec Schemas. Je vais répondre à cela sur votre question postée. –