【问题标题】:The object name contains more than the maximum number of prefixes. The maximum is 2对象名称包含的前缀数量超过了最大数量。最大值为 2
【发布时间】:2020-09-12 03:07:50
【问题描述】:

我面临与许多其他人类似的问题,错误消息“对象名称包含的前缀数量超过了最大数量。最大值为 2。”

我的情况是,

CREATE PROCEDURE DBO.[USP_PROCEDURE]
AS
BEGIN

DECLARE @LOADTIME DATETME2(7)
SET @LOADTIME = (SELECT LOADTIME FROM [LINKEDSERVERNAME].[DATABASENAME].[SCHEMANAME].[TABLENAME] WHERE TABLENAME = 'XXXXXX')

INSERT INTO [CURRENTSERVER].[SCHEMANAME].[TABLENAME]
SELECT COLUMN1, COLUMN2,  
.... FROM TABLENAME JOIN TABLENAME1 ON ....
...
...

END

包含加载时间的表存在于链接服务器/数据库中,它是一个重要的值,通过@LOADTIME 在我的过程的 where 子句中进一步使用。当我单独尝试当前服务器时,查询SELECT LOADTIME .... 工作正常。 但是当我将它作为程序的一部分运行时,我的程序因上述错误而失败。 链接服务器连接已设置并且工作正常。而且我的程序需要在当前服务器上运行,这消除了在链接服务器上创建程序的范围。希望我的场景是清晰的。 欢迎所有回复。提前致谢。

【问题讨论】:

  • 这不是一般的 ANSI/ISO SQL 问题。请指定您使用的 DMBS。
  • 您确定给您错误的行是这些行之一吗?此外,您的插入看起来有点可疑。 [CURRENTSERVER].[SCHEMANAME].[TABLENAME] 应该是 [DATABASENAME].[SCHEMANAME].[TABLENAME] 对吧?
  • 数据库名称在哪里?

标签: sql sql-server


【解决方案1】:

行:

INSERT INTO [CURRENTSERVER].[SCHEMANAME].[TABLENAME]

包含服务器名称但没有数据库名称。你应该使用

INSERT INTO [MYDATABASE].[SCHEMANAME].[TABLENAME]

INSERT INTO [CURRENTSERVER].[MYDATABASE].[SCHEMANAME].[TABLENAME]

甚至

INSERT INTO [SCHEMANAME].[TABLENAME]

如果您要插入与存储过程相同的数据库中

【讨论】:

    猜你喜欢
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    相关资源
    最近更新 更多