iT邦幫忙

0

預存程序裡撰寫linked server 連接遠端DB SERVER 的錯誤訊息

lionab 2011-01-13 20:37:2011044 瀏覽

我在SQL Server 2008新增 stored procedure , 這個SP主要的功能是使用linked server 連接另一台資料庫伺服器, 並 Update 或Insert into其中一個Table
剛開始先用 Management Studio新增一個SQL Query測試語法都沒問題, 執行時也都正常運作, 沒有錯誤訊息.
但是新增SP後, 把程式碼Copy 至SP內, 按執行鈕(儲存SP時, 要先執行),
程式碼大致如下(已刪減掉多餘程式碼):

CREATE PROCEDURE PS_TEST

AS
BEGIN
	SET NOCOUNT ON;
	
	IF NOT EXISTS(SELECT name FROM sys.servers WHERE name = 'erpdb1')
		BEGIN
			--=====建立連接伺服器, 將伺服器加入 sys.servers================
			EXEC sp_addlinkedserver 
				@server = 'erpdb1',        --被訪問的伺服器别名
				@srvproduct = '',
				@provider = 'MSDASQL',
				@provstr = 'DRIVER={SQL Server};SERVER=192.168.6.11;
UID=sa;PWD=password;Database=DB_Name'

			--建立連接遠端伺服器登入映射
			EXEC sp_addlinkedsrvlogin 
				@rmtsrvname ='erpdb1', 
				@useself = 'false', 
				@locallogin = NULL, 
				--遠端伺服器登入帳號 
				@rmtuser = 'sa', 
				--遠端伺服器登入密碼 
				@rmtpassword = 'password' 
			GO
		END

	select 'HELLO WORLD'
	
	IF EXISTS(SELECT name FROM sys.servers WHERE name = 'erpdb1')
		begin
			sp_dropserver 'erpdb1','droplogins'   --移除連接
			GO
		end
		
	SET NOCOUNT OFF;
	GO
END
GO

出現下面的錯誤訊息 -------
訊息 102,層級 15,狀態 1,程序 PS_TEST,行 29
接近 'password' 之處的語法不正確。
訊息 156,層級 15,狀態 1,行 3
接近關鍵字 'select' 之處的語法不正確。
訊息 102,層級 15,狀態 1,行 7
接近 'sp_dropserver' 之處的語法不正確。
訊息 156,層級 15,狀態 1,行 3
接近關鍵字 'SET' 之處的語法不正確。
訊息 102,層級 15,狀態 1,行 1
接近 'END' 之處的語法不正確。

請問各位大大, 我哪裡寫錯了...>_<

2 個回答

8
player
iT邦大師 1 級 ‧ 2011-01-14 01:14:45
最佳解答

請先把GO 都拿掉, 我不記的SQL預存程序裡可以用GO

6
alexlin6194
iT邦新手 2 級 ‧ 2011-01-14 09:33:10

基本上go還是可以用的,並無影響
你先確認:
1.變數名稱有無宣告??
例如: Declare @provstr varchan (20)

2.要指定****變數名稱的值,需加SET
例如: SET @provstr = 'DRIVER={SQL Server};SERVER=192.168.6.11;
UID=sa;PWD=password;Database=DB_Name'

lionab iT邦新手 2 級 ‧ 2011-01-14 13:22:53 檢舉

謝謝您的回覆, @provstr 這些是 sp_addlinkedserver 參數名稱

我要發表回答

立即登入回答