'OBJECT_SCHEMA_NAME'不是公认的内置函数名称

时间:2013-02-12 17:01:52

标签: sql-server-2008-r2

我正在尝试运行脚本在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

1 个答案:

答案 0 :(得分:2)

如果这实际上是在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您将能够使用此功能。