2011-09-13 110 views
1

我想執行帶有服務器名稱的sql命令。這裏是一些示例查詢sql server 2008 r2「找不到對象,因爲它不存在或您沒有權限」

SELECT * FROM [SYSTEM1\SQLEXPRESS].Sample1.dbo.table1 
INSERT INTO [SYSTEM1\SQLEXPRESS].Sample1.dbo.table1 values('BALA') 

以上兩個執行成功。在申請表1我的ID是自動遞增所以 當我執行以下命令其返回的錯誤信息

SET IDENTITY_INSERT [SYSTEM1\SQLEXPRESS].Sample1.dbo.table1 ON 
INSERT INTO [SYSTEM1\SQLEXPRESS].Sample1.dbo.table1 values(2,'KARTHIK') 
SET IDENTITY_INSERT [SYSTEM1\SQLEXPRESS].Sample1.dbo.table1 OFF 

無法找到對象[SYSTEM1 \ SQLEXPRESS] .Sample1.dbo.table1,因爲它不存在或您沒有權限。如何解決這個問題

+0

感謝朋友。我從jnk得到了解決方案。 – Karthik

回答

4

Looks like this is a known issue with linked servers.解決方法是:

exec [Server-SQL].MyDatabase.dbo.sp_executesql N'SET IDENTITY_INSERT 
Sample1.dbo.table1 ON; 
INSERT dbo.table1 values(2,''KARTHIK''); 
SET Sample1.dbo.table1 OFF;' 

基本上作爲一個RPC而不是直接查詢運行命令。

+0

嗯,同樣的:-) –

+0

對象名稱'[SYSTEM1 \ SQLEXPRESS] .Sample1.dbo.table1'包含超過最大數量的前綴。最大值爲2. – Karthik

+0

@karthik - 我的錯誤,請刪除服務器前綴,因爲您正在本地運行鏈接服務器。我會更新。 – JNK

3

AFAIK你需要在本地執行命令。你爲什麼不創建一個存儲過程,這樣做,那麼存儲過程可以說:

SET IDENTITY_INSERT dbo.Table1 ON; 

,並且可以使用調用程序:

EXEC [SYSTEM1\SQLEXPRESS].Sample1.dbo.MyProcedure; 
+0

+1 - 只有解決實際問題 – JNK

+0

@JNK的其他答案,我同意。回想起來,我的回答根本沒有幫助。一個人可以降低自己的答案嗎? – PaulStock

+0

@保羅 - 不,但你可以刪除它。 – JNK

相關問題