2016-01-13 17 views
6

Tôi đang tạo một CLR SQL mới bằng Visual Studio 2013 và trong Thuộc tính dự án đã đặt Default Schema thành 'decASM' (là 'dbo'). Khi tôi thực hiện thay đổi này và xây dựng lại dự án VS tạo ra một tập tin sql như sau:VS SQLCLR: Hàm X chưa tham chiếu đến lược đồ 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ó một lỗi với mỗi CREATE FUNCTION tiếng gọi của:

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

Nếu tôi thay đổi Default Schema trở lại 'dbo', dự án xây dựng thành công. Tôi đã tìm kiếm thông qua các thuộc tính của dự án và Google nhưng không thể tìm thấy bất kỳ đề cập nào về cách thêm tham chiếu đến 'decASM'.

Trả lời

13

Bạn cũng cần phải tạo Giản đồ, dưới dạng đối tượng SSDT riêng biệt. Nó sẽ không được tự động tạo ra cho bạn chỉ bằng cách xác định rằng bạn muốn sử dụng nó cho các đối tượng SQLCLR của bạn. Bạn sẽ có thể:

  • Add New Item (kiểm soát + phím Shift + Một) bất cứ nơi nào để dự án của bạn
  • Chọn mẫu SQL Server>an>Schema
  • Đặt tên cho mục/tệp: decASM
  • Lưu một d đóng kịch bản

Nó sẽ tạo một tệp SQL riêng trong dự án của bạn cho điều này, có chứa một lệnh duy nhất CREATE SCHEMA [decASM] và sẽ triển khai nó khi bạn xuất bản mã SQLCLR của mình.

Các bước được nêu ở trên đã hoạt động đối với tôi bằng Visual Studio 2013.

+0

tôi có phải chạy tập lệnh lược đồ tạo trong cơ sở dữ liệu và sau đó nhập cơ sở dữ liệu vào dự án SSDT không? – Baahubali

+0

@ user1490835 NẾU câu hỏi thực tế của bạn là về Schema thì tôi sẽ nói rằng bạn không cần phải tạo nó trong DB trước. Nhưng vì bạn đang thực sự hỏi về [cái gì liên quan đến SQLCLR] (http://stackoverflow.com/q/41055706/577765), tôi sẽ nói rằng vấn đề của bạn hoàn toàn không liên quan gì đến Schemas. Tôi sẽ giải quyết vấn đề này trên câu hỏi đã đăng của bạn. –

Các vấn đề liên quan