2

SQL Server 2008 r2 で tsqlt をセットアップするスクリプトを実行しようとすると、このエラーが発生します

「OBJECT_SCHEMA_NAME」は、認識される組み込み関数名ではありません。

SQL 2008 r2 を搭載した別のマシンでは、スクリプトは正常に実行されます。

それぞれのマシンのSQLサーバーのセットアップで、ユーザーまたは権限に違いは見られません。

これは、エラーをスローするステートメントです。

    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
4

1 に答える 1

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_NAMESQL Server 2005 Service Pack 2 で導入されました。もう SQL Server 2005 RTM でシステムを実行するべきではありません。SP4をインストールすると、この機能を使用できるようになります。

于 2013-02-12T17:04:45.210 に答える