2014-09-30 70 views
5

我的存儲過程正在嘗試將記錄寫入另一臺服務器上的數據庫。該聲明是在這裏:對象名稱包含超過最大數量的前綴。最大值爲3

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的別名縮短然而,前綴的數量似乎正在實現這個錯誤。

我無法更改目標數據庫上的數據庫架構。有關如何解決此問題的任何建議?

感謝 蓋伊

回答

6

正確的四個部分的表名是server.database.schema.tablename - 你有一些多餘的部分存在。

看起來像表名是OPC.WriteRequests?如果是,那麼你必須使用括號:SQL05.ManufacturingPortal.dbo.[OPC.WriteRequests]

但也許你只是有一部分名稱不正確?

+0

+1不錯的猜測。我會避免這樣的表名。它們增加了混亂,而不是做任何好事。如果完全需要兩個單詞表名稱,可以使用Pascal Casing或使用_加入單詞。 – 2014-09-30 11:31:18

4

您收到錯誤的原因是因爲您沒有使用有效的名稱。您似乎參考了兩個模式,即dboOPC

對於INSERTMSDN article中引用的有效語法爲server_name.database_name.schema_name.object_name

刪除不正確的模式,然後重試。

+0

嗨,表名是「OPC.WriteRequests」...我知道 - 我沒有寫它:-(! – guyh92 2014-09-30 12:14:57

+1

在這種情況下,你只需要用方括號來限定表名就像這樣[OPC]。 WriteRequests]'。 – 2014-09-30 12:49:48

1

與braket「[]」一起使用的名稱和遠程數據庫服務器是這樣的。 [87.247.678.80,1666] [danesfe] [ADMIN1] [homefarsi]

1

我在那裏我得到當我試圖執行下面的代碼的消息類似的問題(使表)

"into SalesCube_temp.SalesCube_temp.dbo.ALL_SUPPLIER_SALES_METRICS_I"

我才明白,我用的是不正確的語法,然後整流爲

"into SalesCube_temp.dbo.ALL_SUPPLIER_SALES_METRICS_I"

它的工作,我的故事結束。但我花了近10到15分鐘tr

希望它會幫助別人。

1

我正在使用一切正確的問題仍然存在。我的命令是類似下面

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

我解決它首先在服務器中創建表,然後使用INSERT INTO語句未經問題執行

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

感謝, SREE

相關問題