【问题标题】:'OBJECT_SCHEMA_NAME' is not a recognized built-in function name“OBJECT_SCHEMA_NAME”不是可识别的内置函数名称
【发布时间】:2013-02-13 01:12:07
【问题描述】:

我正在尝试运行脚本以在 SQL Server 2008 r2 上设置 tsqlt 并收到此错误

'OBJECT_SCHEMA_NAME' 不是可识别的内置函数名称。

在另一台装有 SQL 2008 r2 的机器上,脚本运行良好。

我看不出每台机器的 sql server 设置中的用户或权限有什么不同。

这是引发错误的语句:

    CREATE FUNCTION tSQLt.Private_GetOriginalTableInfo(@TableObjectId INT)
RETURNS TABLE
AS
  RETURN SELECT CAST(value AS NVARCHAR(4000)) OrgTableName,
    OBJECT_ID(QUOTENAME(OBJECT_SCHEMA_NAME(@TableObjectId)) 
    + '.' + QUOTENAME(CAST(value AS NVARCHAR(4000)))) OrgTableObjectId
    FROM sys.extended_properties
   WHERE class_desc = 'OBJECT_OR_COLUMN'
     AND major_id = @TableObjectId
     AND minor_id = 0
     AND name = 'tSQLt.FakeTable_OrgTableName';
GO

【问题讨论】:

    标签: sql-server-2008-r2


    【解决方案1】:

    如果这实际上是在 SQL Server 2008 R2 上,则您的数据库处于 SQL Server 2000 兼容模式。你可以知道你现在处于什么模式:

    SELECT name, compatibility_level
      FROM sys.databases
      WHERE name = N'your_database';
    

    如果这是 80,您将需要向上移动(但这需要测试):

    ALTER DATABASE your_database SET COMPATIBILITY_LEVEL = 100;
    

    如果你不能上移,那么你总是可以通过加入sys.schemas来获取架构名称,而不是依赖内置函数。


    也就是说,如果您使用的是 SQL Server 2005 RTM(如评论中所暗示的那样),OBJECT_SCHEMA_NAME was introduced in SQL Server 2005 Service Pack 2。您不应再在 SQL Server 2005 RTM 上运行任何系统。 Go install SP4,你就可以使用这个功能了。

    【讨论】:

    • 我如何知道它当前处于什么兼容模式?
    • 哦,我现在明白了。 9.0.1399
    • @JonnyCundall 你在哪里看到的?看起来像 SQL Server 2005,而不是 SQL Server 2008 R2。
    • 我在 ssms 中看到了。我想我有 2008 r2 ssms,但它正在查看 2005 sp2 数据库。在我比较两台机器之前,我本可以注意到这一点!我很确定这就是问题所在,尽管这有点奇怪,因为谷歌说 2005 SP2 应该能够识别该功能。
    • 9.0.1399 是 2005 RTM,而不是 2005 SP2。因此,如果您正在查看 2005 RTM,它将没有该功能,因为需要 SP2(这是添加它的位置)。
    猜你喜欢
    • 2014-06-12
    • 2014-01-25
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多