2010-06-30 70 views
0

我有兩個鏈接的SQL服務器,我試圖在另一臺服務器上發出更新,但出現錯誤「無法準備聲明」,然後是「必須聲明標量變量「@Shipper_Nbr」」使用參數更新鏈接的SQL服務器

我使用的語法是:

update DBSERVER.DBNAME.DBO.TABLE set Field = @Value WHERE ID = @id 

什麼是做這種正確的方法是什麼?

UPDATE:

我嘗試使用一個存儲過程,並得到同樣的結果。另外,我注意到其他信息。語法檢查出來,當我試圖保存存儲過程時,我只會得到錯誤。此外,我注意到錯誤還指出「OLE DB提供程序」SQLNCLI「鏈接服務器」WARSQLVS01「返回消息」延遲準備無法完成「。」

ACK - 我想通了。這是一個單獨的行,我試圖從OPENQUERY select語句中傳遞參數。對於那個很抱歉! : - \

+2

這是一個奇怪的錯誤來獲得,考慮@Shipper_Nbr不會在你提供的代碼顯示出來。有更多可以與我們分享嗎? – 2010-06-30 13:13:20

+0

我試圖保持它的通用性。下面是實際的語句: \t \t UPDATE \t WARSQLVS01.ISS3_AND_DHAM_PROD.dbo.ISS_AND_data_Shipments \t \t SET \t \t Arrive_DT = @Actual_DateTime \t \t WHERE \t Shipper_Nbr = @Shipper_Nbr和 \t \t \t \t CONTAINER_NAME = @Container_Name – Josh 2010-06-30 13:24:35

回答

0

你確定問題出在服務器鏈接上,而不是你的其他SQL語句的問題? @Shipper_Nbr值分配在哪裏?

+0

呀 - @Shipper_Nbr只是存儲過程的一個參數。它在存儲過程中的其他地方使用,但僅在此語句中指示錯誤。 – Josh 2010-06-30 13:21:32

+0

後的全部程序代碼 – Madhivanan 2010-06-30 14:00:00

+1

沒有,但我會後的頭證明變量聲明: ALTER PROCEDURE [DBO] [CSN_UpdatePoints_InTransit( \t @Shipper_Nbr \t \t VARCHAR(6), \t @ CONTAINER_NAME \t \t VARCHAR(5), \t \t @Point \t \t \t十進制(3,0), \t \t @Actual_DateTime日期時間, \t \t @CustomerID \t \t varchar(30)='SHAP' ) – Josh 2010-06-30 14:01:54

1

不完全確定這個問題是什麼,但我們必須通過在遠程服務器上設置一個存儲過程並調用它來處理類似問題,而不是試圖在本地處理遠程服務器上的項目。

0

硒,如果這個工程

UPDATE T 
SET Arrive_DT = @Actual_DateTime 
WHERE Shipper_Nbr = @Shipper_Nbr and Container_Name = @Container_Name 
FROM WARSQLVS01.ISS3_AND_DHAM_PROD.dbo.ISS_AND_data_Shipments as T 
+0

這給了我:關鍵字'FROM'附近的語法不正確 – Josh 2010-06-30 14:24:42

+1

是的,FROM子句通常在WHERE子句之前... – ErikE 2010-09-23 18:12:02