SQL中的用户定义函数未执行

时间:2019-02-20 11:52:22

标签: sql sql-server function

我正在尝试运行此查询:

SELECT
    [DateAdded], [DateUpdated],
    [dbo].[firstchartoupper]([LastName]) AS [LastName],
    [FirstName], [NPI], [StreetAddress],
    [CITY], [ZIP], [STATE], [Organization],
    [ReportYearMonth], [FileUploadDate] 
FROM
    tt

[dbo].[firstchartoupper]是我编写的自定义用户定义的标量函数

CREATE FUNCTION [dbo].[firstchartoupper]
     (@name AS NVARCHAR(255))
RETURNS NVARCHAR(255)
AS
BEGIN
    DECLARE @CHAR NVARCHAR(1);
    DECLARE @rem NVARCHAR(50);
    DECLARE @output NVARCHAR(255);

    IF @name IS NULL
       RETURN NULL;

    SET @char = SUBSTRING(@name, 1, 1);
    SET @rem = SUBSTRING(@name, 2, LEN(@name));
    SET @output = @char + @rem;

    RETURN @output;
END

但是,我遇到了错误

  

找不到dbo列或用户定义的函数或聚合标量

4 个答案:

答案 0 :(得分:0)

您的函数实际上没有执行任何操作,但是似乎可以像this db <> fiddle那样“起作用”。

这是您想要的表达方式吗?

select stuff(str, 1, 1, upper(left(str, 1)))

这是大写的字符串中的第一个字符-这似乎就是您想要的。

答案 1 :(得分:0)

您的函数和正确调用它的SQL。

请确保执行在适当的数据库上创建函数的SQL ,并在执行使用该函数的SELECT之前执行(如果在SSMS上使用GO作为批处理分隔符) 。您可以在USE DatabaseName语句之前使用CREATE FUNCTION来切换当前连接的数据库。

然后使用此查询找到它:

USE DatabaseName

SELECT
    ObjectType = O.type_desc,
    SchemaName = SCHEMA_NAME(O.[schema_id]),
    ObjectName = O.name,
    CreatedDate = O.create_date,
    ModifiedDate = O.modify_date
FROM
    sys.objects AS O
WHERE
    O.type IN ('FN')

如果未列出,则说明创建失败或您是在其他数据库上创建的。

您可以通过直接为其提供值来测试您的函数而无需任何表引用:

SELECT dbo.firstchartoupper(N'Some testing value')

如果数据库名称位于另一个数据库上,也可以尝试在模式之前添加数据库名称:

SELECT DatabaseName.dbo.firstchartoupper(N'Some testing value')

答案 2 :(得分:0)

首先检查您的函数是否已经存在于数据库中。

  select * from sys.objects where name = 'firstchartoupper' and type_desc = 'SQL_SCALAR_FUNCTION'

如果此方法正常,请尝试使用数据库名称进行查询。如下图

        SELECT
            [DateAdded], [DateUpdated],
            [yourdbname].[dbo].[firstchartoupper]([LastName]) AS [LastName],
            [FirstName], [NPI], [StreetAddress],
            [CITY], [ZIP], [STATE], [Organization],
            [ReportYearMonth], [FileUploadDate] 
        FROM
            tt

GO

答案 3 :(得分:0)

显然,似乎sql server没有检测到该功能。我只是先按ctrl + f5,然后在Management Studio中按f5。