2011-09-13 19 views
1

サーバ名でsqlコマンドを実行します。ここにいくつかの例のクエリですsql server 2008 r2 "オブジェクトが存在しないか、アクセス権がないため、オブジェクトが見つかりません"

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

上記2つは正常に実行されました。私のTABLE1に提出された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 - ACTUAL問題に対処する他の回答のみ – JNK

+0

@JNK、私は同意します。振り返ってみると、私の答えは役に立たなかった。 1つは自分の答えをdownvoteすることができますか? – PaulStock

+0

@Paul - いいえ、削除できます。 – JNK

関連する問題