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

时间:2014-09-30 11:09:46

标签: sql sql-server tsql

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

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 

但是,当我尝试创建存储过程时 - 出现以下错误:

The object name 'SQL05.ManufacturingPortal.dbo.OPC.WriteRequests' contains more than 
the maximum number of prefixes. The maximum is 3.

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

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

由于 盖

9 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:5)

您收到错误的原因是您没有使用有效名称。您似乎引用了两个架构dboOPC

server_name.database_name.schema_name.object_name INSERT引用的有效语法为{{1}}。

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

答案 2 :(得分:3)

我正在使用一切正确的问题仍然存在。我的命令如下:

select * into server.database.schema.table from table2

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

Create Table...........
Insert into server.database.schema.table  select * from table2

谢谢, SREE

答案 3 :(得分:1)

与braket" []"一起使用对于这样的名称和远程数据库服务器。 [87.247.678.80,1666] [danesfe]。[ADMIN1]。[homefarsi]

答案 4 :(得分:1)

当我尝试执行以下代码(make table)时,我遇到了类似的问题

"into SalesCube_temp.SalesCube_temp.dbo.ALL_SUPPLIER_SALES_METRICS_I"

然后我意识到我使用了不正确的语法,然后纠正为

"into SalesCube_temp.dbo.ALL_SUPPLIER_SALES_METRICS_I"

它工作,我的故事结束。但我花了将近10到15分钟的时间

希望它会对某人有所帮助。

答案 5 :(得分:1)

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

SELECT * 
INTO [database].[schema].[table] 
FROM [server].[database].[schema].[table]

答案 6 :(得分:0)

请从头开始更改表格,并尝试以常规方式插入

Use ManufacturingPortal 

IF @Builds > 0

   BEGIN

       SET @DPU = @Failures / @Builds

       INSERT INTO OPC.WriteRequests (ID, RegisterID, Value, RequestedDate, IsCompleted)
       VALUES(@PLCID, 'F8:10' , CAST(@DPU AS NUMERIC(10,2)), GETDATE(), 0)    

   END 

答案 7 :(得分:0)

我有同样的问题。 问题是由于以下错误引起的:我没有通过传递textbox1.text作为参数,而是从后面的代码中调用了textbox1

希望有帮助

答案 8 :(得分:0)

我的(继承)代码使用string.Format并传递服务器名称,例如

from m5.objects.AbstractMemory import *
from m5.objects.ClockDomain import *

但是在配置中,“ MuhServerName”为“ MyServer.MyDomain.com/MyInstance”,因此将其加载为

string.Format("Select * from {0}.AwesomeDB.dbo.EpicTable", WebConfigurationManager.AppSettings["MuhServerName"]);

代替

Select * from MyServer.MyDomain.com/MyInstance.AwesomeDB.dbo.EpicTable