对象名称包含的前缀数量超过最大数量.最大值为3

guy*_*h92 9 sql t-sql sql-server

我的存储过程正在尝试将记录写入另一个服务器上的数据库.声明如下:

IF @Builds > 0
   BEGIN
        SET @DPU = @Failures / @Builds
        INSERT INTO SQL05.ManufacturingPortal.dbo.OPC.WriteRequests (ID, RegisterID, Value, RequestedDate, IsCompleted)
        VALUES(@PLCID, 'F8:10' , CAST(@DPU AS NUMERIC(10,2)), GETDATE(), 0)    
    END 
Run Code Online (Sandbox Code Playgroud)

但是当我尝试创建存储过程时 - 我收到以下错误:

The object name 'SQL05.ManufacturingPortal.dbo.OPC.WriteRequests' contains more than 
the maximum number of prefixes. The maximum is 3.
Run Code Online (Sandbox Code Playgroud)

我已经尝试创建Server.DB.DBO的别名来缩短前缀的数量但是似乎实现了这个错误.

我无法在目标数据库上更改我的数据库架构.关于如何解决这个问题的任何建议?

谢了,兄弟们

Arv*_*rvo 10

正确的四部分表名是server.database.schema.tablename - 那里有一些多余的部分.

看起来表名是OPC.WriteRequests?如果是,那么你必须使用括号:SQL05.ManufacturingPortal.dbo.[OPC.WriteRequests]

但也许你只是有一些名字不正确?


sre*_*ree 6

我使用的一切都是正确的,但问题仍然存在。我的命令如下

select * into server.database.schema.table from table2
Run Code Online (Sandbox Code Playgroud)

我通过首先在服务器中创建表来解决它,然后使用插入到没有问题的语句执行

Create Table...........
Insert into server.database.schema.table  select * from table2
Run Code Online (Sandbox Code Playgroud)

谢谢,斯里


und*_*ica 6

就我而言,它实际上希望在 INTO 表所在的服务器上运行:

SELECT * 
INTO [database].[schema].[table] 
FROM [server].[database].[schema].[table]
Run Code Online (Sandbox Code Playgroud)

  • 将源作为链接服务器(而不是相反)对我来说也很有效。SELECT INTO 目标是链接服务器似乎不是一个可行的选项。 (2认同)

Tay*_*nan 5

您收到错误的原因是您没有使用有效名称.您似乎引用了两个架构,dbo并且OPC.

有效的语法是server_name.database_name.schema_name.object_name对作为参考MSDN的文章INSERT.

删除不正确的架构,然后重试.