2016-01-13 46 views
6

Sto creando un nuovo CLR SQL utilizzando Visual Studio 2013 e nelle Proprietà progetto abbiamo impostato lo schema predefinito su "decASM" (era "dbo"). Quando faccio questo cambiamento e ricostruire il progetto VS genera un file SQL come segue:VS SQLCLR: la funzione X ha un riferimento non risolto allo schema 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 

c'è un errore con ogni chiamata CREATE funzione di:

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]. 

Se cambio lo schema predefinito di nuovo a 'dbo', il progetto si costruisce con successo. Ho cercato tra le proprietà del progetto e Google ma non riesco a trovare alcuna menzione su come aggiungere un riferimento a 'decASM'.

risposta

13

È necessario creare lo schema anche come oggetto SSDT separato. Non verrà creato automaticamente per te solo specificando che vuoi usarlo per gli oggetti SQLCLR. Si dovrebbe essere in grado di:

  • Add New Item (controllo + Maiusc + A) ovunque al progetto
  • Selezionare il modello SQL Server>Sicurezza>schema
  • Nome dell'oggetto/file: decASM
  • Salvare un d chiudere lo script

Si creerà un file SQL separato nel progetto per questo, che contiene un singolo comando CREATE SCHEMA [decASM], e distribuirlo quando si pubblica il codice di SQLCLR.

I passaggi sopra riportati hanno funzionato per me utilizzando Visual Studio 2013.

+0

devo eseguire lo script dello schema creare nel database e quindi importare di nuovo il database nel progetto SSDT? – Baahubali

+0

@ user1490835 SE la tua domanda riguardava Schema, direi che non è necessario prima crearlo nel DB. Ma dal momento che in realtà stai chiedendo informazioni su [qualcosa relativo a SQLCLR] (http://stackoverflow.com/q/41055706/577765), dirò che il tuo problema non ha assolutamente nulla a che fare con Schemas. Tratterò questo sulla tua domanda postata. –