【问题标题】:SQL function not created in the correct SQL database未在正确的 SQL 数据库中创建 SQL 函数
【发布时间】:2017-10-20 05:36:18
【问题描述】:

我已经在 SQL 数据库上成功创建了以下函数。

CREATE FUNCTION [dbo].[maximum_time]
(
    @TotalLengthofRecords REAL
)
RETURNS FLOAT
AS
BEGIN
    RETURN
        CASE 
            WHEN @TotalLengthofRecords > 3600 THEN 3600
            ELSE @TotalLengthofRecords
        END 
END

查看Microsoft SQL Server Management Studio中的对象,似乎System Database -> master中已经成功创建了用户自定义函数。但是,该函数未出现在项目数据库中。

每当我尝试使用以下代码调用该函数时:

SELECT 
    A.*,
    [dbo].[maximum_time]([TotalLengthofRecords_MAX])AS [TotalLengthofRecords_MAX]
    INTO [dbo].[BunkerAISFinal_V7]
    FROM [dbo].[BunkerAISFinal_V6] AS A;

系统会抛出以下错误:

找不到“dbo”列或用户定义的函数,或者 聚合“dbo.maximum_time”,或者名称不明确。

我该如何解决这个问题?有没有办法在特定的数据库名称中创建函数?

【问题讨论】:

  • 试试看here。同样的问题。可以帮到你。
  • 我看过帖子。这是一个不同的问题,因为我相信我的函数应该是 Scalar-valued function
  • 好像在System Database -> master中成功创建了用户自定义函数。可能是这样,但它是在数据库所有者 (dbo) 的帐户下在当时使用的任何数据库中创建的。或许你应该先了解use <dbname> 的概念以及[dbo] 的含义,然后再将其随机插入到您的SQL 中?
  • 嗨,肯。我理解这个概念。但是,代码不适用于替换CREATE FUNCTION [dbname].[dbo].[maximum_time]。我该如何纠正?
  • 在你的函数类型的顶部使用 [你的数据库] GO 然后继续你的函数代码

标签: sql sql-server sql-server-2008


【解决方案1】:

根据我收到的cmets,问题是由于没有定义将在其中创建函数的数据库名称。添加以下代码中的前两行以解决问题。

USE [database_name]
GO

CREATE FUNCTION [dbo].[maximum_time]
(
    @TotalLengthofRecords REAL
)
RETURNS FLOAT
AS
BEGIN
    RETURN
        CASE 
            WHEN @TotalLengthofRecords > 3600 THEN 3600
            ELSE @TotalLengthofRecords
        END 
END

【讨论】:

  • 你也可以为当前用户设置一个默认数据库来避免这种情况
  • @berthos master 数据库中用户定义的函数不能被直接引用。
【解决方案2】:
     SELECT 
A.*,
Master.[dbo].[maximum_time]([TotalLengthofRecords_MAX])AS [TotalLengthofRecords_MAX]
INTO [dbo].[BunkerAISFinal_V7]
FROM [dbo].[BunkerAISFinal_V6] AS A;

1.要引用一个对象,用户必须遵循这个

[ServerName/ServerIp].[DatabaseName].[schemaname].[ObjectName].

对于不同的服务器,必须应用一个链接服务器。

2。如果被引用对象的服务器相同,并且对象在另一个数据库中并且具有不同的架构,您可以使用。

[DatabaseName].[schemaname].[ObjectName]

3 如果数据库相同且架构不同,则使用 [架构名].[对象名]

4 其他

直接引用对象

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多