2011-01-15 19 views
12

Tôi phải có một số quyền sai, nhưng tôi không thể tìm ra cách. Các mã sau đây được đơn giản hóa nhưng tôi thậm chí không thể có được điều này để làm việcSQLServer không thể tìm thấy hàm chức năng do người dùng xác định của tôi trong thủ tục được lưu trữ

CREATE FUNCTION ufTest 
(
    @myParm int 
) 
RETURNS int 
AS 
BEGIN 
    DECLARE @Result int 

    SELECT @Result = @myParm + 1 

    RETURN @Result 
END 
GO 

Sau đó, tôi chỉ muốn để có thể gọi hàm từ một thủ tục lưu trữ:

CREATE PROCEDURE dbo.[uspGetGroupProfileService] 
@id  int 
AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @otherId int; 
    SET @otherId = dbo.ufTest(@id); 
END 

SQLServer giữ nói với tôi rằng nó không thể tìm thấy dbo.ufTest. Nó xuất hiện dưới [DB] \ Programmability \ Functions \ Scalar-valued Functions nhưng tôi không thể tìm ra cách sử dụng nó.

Bất kỳ ai có bất kỳ ý tưởng nào tôi đang làm sai?

+1

Bạn có chắc chắn nó đang được tạo trong lược đồ 'dbo' không? Nó sẽ được đưa vào bất kỳ lược đồ mặc định nào của bạn. –

+0

Điều gì sẽ xảy ra khi bạn cố gắng chạy mã từ SP bằng chính nó như là một lô (với một giá trị hardcoded hoặc bất cứ điều gì)? –

+0

proc được lưu trữ chỉ chạy tốt. Tôi chỉ có một số mã trong rất nhiều procs được lưu trữ khác nhau mà tôi muốn chuyển sang một hàm. Điều này thực sự không phải là khó khăn này. Tôi bắt đầu nghĩ rằng đó là một cái gì đó sai với việc cài đặt –

Trả lời

10

Làm việc cho tôi.

Hãy thử CREATE FUNCTION dbo.ufTest ...

tôi giả schema mặc định của bạn không thể dbo và nó kết thúc trong một sơ đồ khác nhau. Nếu không thì lời giải thích duy nhất tôi có thể nghĩ đến là bạn có thể cần cấp quyền cho nó.

+1

+1: Hoạt động vào năm 2005 cho tôi. Nếu thủ tục được tạo trong một cơ sở dữ liệu khác, hàm sẽ cần ba ký pháp tên để được tham chiếu đúng cách. –

+0

Không có súc sắc. Nếu bạn nhận thấy kết thúc bài đăng gốc của tôi. Nó được hiển thị dưới cơ sở dữ liệu thích hợp trong Management Studio. –

+3

Bạn có thể kích chuột phải vào chức năng vô hướng trong SSMS trong tài khoản bạn sử dụng để tạo các đối tượng này, chọn "script function as select to ..." Điền vào giá trị tham số và thực hiện nó độc lập? Nếu có, bạn có thể thực hiện nó từ thủ tục lưu sẵn trong SSMS trong cùng một tài khoản không? Nếu Có và vấn đề nằm trong ứng dụng của bạn, bạn sẽ cần phải thực hiện 'GRANT EXECUTE ON [dbo]. [UfTest]' TO '[username]' cũng không phải là bạn đang loại bỏ những tuyên bố intellisense? –

3

Viết ra UDF và kiểm tra tên lược đồ. Nó có lẽ không phải là dbo. Tôi sẽ thay đổi định nghĩa UDF để cụ thể bao gồm dbo. Nói cách khác:

CREATE FUNCTION dbo.ufTest 
+0

Nó đã được tạo ra như dbo.ufTest, nhưng tôi đã thử thêm nó và vẫn không có con xúc xắc. –

0

Hãy thử gọi bằng một lựa chọn thay vì đặt. Và bạn đã kiểm tra điều đó thuộc về lược đồ dbo?

+0

Đã thử lừa chọn quá, nhưng điều đó thực sự chỉ thích hợp nếu bạn trả lại Bảng –

+0

Hoặc khi gán nhiều giá trị cùng một lúc hoặc khi bạn sử dụng mệnh đề where hoặc khi bên trong hàm được gọi là ufTest;) các giá trị khác nhau mà trường hợp của bạn đang sử dụng rất đáng để quay. Bạn có một vấn đề không sao chép được ở đó, tốt nhất là may mắn! – Malk

+0

Chính xác thì ý bạn là gì khi gán nhiều giá trị? Nhiều đối số? Trên thực tế nó chỉ ra rằng nó chỉ là SSMS đưa ra một lỗi sai trong trình soạn thảo truy vấn, vì vậy tôi không bao giờ thực sự cố gắng để chạy nó. –

0

Dường như đây có thể là lỗi trong trình chỉnh sửa truy vấn. Hàm xuất hiện trong cây ở đúng vị trí nhưng thậm chí đặt tên hàm dbo.xxxxxx, hàm này không xuất hiện trong trình chỉnh sửa truy vấn cho đến khi bạn đóng và mở một phiên mới, khi đó nó xuất hiện nếu bạn gõ vào dbo.

Nếu bạn thay đổi tên của hàm, fuction cũ không tồn tại là có sẵn nhưng không phải là tên mới. Làm mới không khắc phục điều này chỉ đóng phiên và bắt đầu phiên mới.

Tại sao tôi nói điều này có thể là lỗi là các thuộc tính quyền đối với hàm Table bao gồm một liên kết màu xanh với các thuộc tính lược đồ nhưng các hàm vô hướng mà nó không có. Vì vậy, nó có thể là một lỗi nằm sâu hơn trong cách lược đồ được thiết lập ở nơi đầu tiên mà có thể có một công việc xung quanh. Hoặc có thể lược đồ trong cơ sở dữ liệu mà tôi đang làm việc chưa được thiết lập chính xác.

Hy vọng rằng người khác có thể tỏa sáng một chút về vấn đề này.

0

Đã xảy ra sự cố tương tự chính xác và lỗi của tôi đã được khắc phục bằng cách khởi động lại SQL Server Management Studio đơn giản.

Chỉ cần đăng điều này trong trường hợp bất kỳ ai khác đã làm mọi thứ đúng và vẫn không thể gọi chức năng của anh ấy.

0

Là một phương sách cuối cùng nếu bất kỳ ở trên và đặc biệt @ câu trả lời jrdev22 đã không giúp bạn (và để lại cho bạn bối rối vì sao), khởi động lại SQL Server dịch vụ trong Configuration Manager kể từ khi khởi động lại SSMS một mình đôi khi không reset mọi thứ (ví dụ như khi tạo một cá thể đăng nhập mới nhưng không thể đăng nhập bằng nó).

SQL Server Configuration Manager> SQL Server Services > SQL Server > Restart 
0

Nếu bạn không thể tìm thấy hàm bạn vừa tạo có hai lý do cho nó.

  1. bạn đang sử dụng tên hàm sai, bạn cần phải thêm tên dbo.function để tải.
  2. Tôi cũng đã tìm thấy một vấn đề khác như mặc dù tên chính xác được nhập và cũng có sẵn trong trình khám phá đối tượng sau khi làm mới, bạn không thể tìm thấy nó khi bạn đang cố gắng sử dụng chức năng.

Trong trường hợp này chỉ cần đóng máy chủ sql và mở lại và bạn sẽ có thể xem hàm.

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