2017-06-01 7 views
0

でユーザー定義関数UDFを実行することはできません私は、顧客IDが入力されたときに、顧客のフルネームを返す関数を作成しています:は、SQL Serverの

CREATE FUNCTION displayName 
(
    @customer_id int 
) 
RETURNS varchar(50) 
AS 
BEGIN 
    DECLARE @name varchar(50) 
    SELECT @name = (SELECT name_first + ' ' + name_last AS FULL_NAME FROM DT_CUSTOMERS WHERE customer_id = @customer_id) 
    RETURN @name 
END 
GO 

は私のコードに何か問題ですか?どのように実行するのですか?

+1

1.あなたはどのように機能を使うのですか?関数は、クエリのSELECT句の一部として使用することができます。 'SELECT dbo.displayName(42)' 2. NULLを文字列と連結すると、結果はNULLになります。したがって、 'first_name'または' last_name'のいずれかがNULLの場合、結果はNULLになります。 –

+0

私はいつもこのエラーが発生します メッセージ195、レベル15、状態10、行1 'displayName'は認識されている組み込み関数名ではありません。 名前が異なる多くのバージョンを作成しました – ejmtv

+1

関数の実行に使用するコードを表示しますか? – TriV

答えて

0

私の場合、ユーザーなしでは動作しません。

私はdbo.displayName

+1

もちろん。常にスキーマ名を追加する必要があります。 –

1

一般的な方法は、クエリを実行しようとして(あなたが権利を持っていない、間違ったデシベルであるかもしれない?)とされているDBで定義することですを入力しなければなりませんでしたスキーマを追加したい場合: このように実行すると、うまくいきます。

USE 
databasename_here 
GO 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE FUNCTION dbo.displayName 
(
    @customer_id int 
) 
RETURNS varchar(50) 
AS 
BEGIN 
    DECLARE @name varchar(50) 
    SELECT @name = (SELECT name_first + ' ' + name_last AS FULL_NAME FROM DT_CUSTOMERS WHERE customer_id = @customer_id) 
    RETURN @name 
END 
GO 

次のように実行する必要があります。

SELECT 
    dbo.displayName(column_which_contains_id) 
from db.schema.table