2016-01-13 18 views
6

Tworzę nowy SQL CLR przy użyciu Visual Studio 2013 i we właściwościach projektu ustawiłem domyślny schemat na "decASM" (był "dbo"). Kiedy dokonać tej zmiany i przebudować projekt VS generuje plik sql następująco:VS SQLCLR: Funkcja X ma nierozwiązane odniesienie do schematu 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 

wystąpił błąd z każdej funkcji Create wezwanie:

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

Gdybym zmienić domyślny schemat z powrotem do "dbo", projekt buduje się pomyślnie. Przeszukałem właściwości projektu i Google, ale nie mogę znaleźć żadnej wzmianki o tym, jak dodać odniesienie do "decASM".

Odpowiedz

13

Należy również utworzyć schemat, jako oddzielny obiekt SSDT. Nie zostanie on automatycznie utworzony dla ciebie przez określenie, że chcesz go użyć dla swoich obiektów SQLCLR. Powinieneś być w stanie:

  • Add New Item (Kontrola + Shift, + ) nigdzie do projektu
  • wybrać serwer SQL szablonu >Zabezpieczenia>schematu
  • Nazwa przedmiotu/pliku: decASM
  • Zapisz d zamknij skrypt

W tym celu utworzy oddzielny plik SQL do projektu zawierający jedno polecenie CREATE SCHEMA [decASM] i wdroży go po opublikowaniu kodu SQLCLR.

Kroki odnotowane powyżej nie działa dla mnie za pomocą Visual Studio 2013

+0

muszę uruchomić skrypt schematu Utwórz w bazie danych, a następnie zaimportować bazę danych do projektu SSDT? – Baahubali

+0

@ user1490835 JEŚLI twoje aktualne pytanie dotyczyło schematu, powiedziałbym, że nie musisz go najpierw tworzyć w DB. Ale skoro pytasz o coś związanego z SQLCLR (http://stackoverflow.com/q/41055706/577765), powiem, że twój problem nie ma absolutnie nic wspólnego ze Schematem. Zajmę się tym na twoim zaksięgowanym pytaniu. –

Powiązane problemy