我尝试运行脚本在 SQL Server 2008 r2 上设置 tsqlt 并收到此错误
'OBJECT_SCHEMA_NAME' is not a recognized built-in function 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 上,则您的数据库处于 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您将能够使用此功能。
关于sql-server-2008-r2 - “OBJECT_SCHEMA_NAME”不是可识别的内置函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837798/