【问题标题】:sql server 2008 r2 "Cannot find the object because it does not exist or you do not have permissions"sql server 2008 r2“找不到对象,因为它不存在或您没有权限”
【发布时间】:2011-09-14 03:29:30
【问题描述】:

我想用服务器名称执行 sql 命令。这是一些示例查询

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

以上两个执行成功。在我的 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,因为它不存在或者您没有权限。如何解决这个问题

【问题讨论】:

  • 感谢朋友们。我从 jnk 那里得到了解决方案。

标签: sql-server-2008


【解决方案1】:

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 而不是直接查询运行。

【讨论】:

  • 对象名称 '[SYSTEM1\SQLEXPRESS].Sample1.dbo.table1' 包含的前缀数量超过了最大数量。最大值为 2。
  • @karthik - 我的错,删除服务器前缀,因为您在链接服务器本地运行它。我会更新的。
【解决方案2】:

AFAIK 你需要在本地执行命令。你为什么不创建一个这样做的存储过程,然后存储过程可以说:

SET IDENTITY_INSERT dbo.Table1 ON;

您可以使用以下方法调用该过程:

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

【讨论】:

  • @JNK,我同意。回想起来,我的回答根本没有帮助。可以否决自己的答案吗?
  • @Paul - 不,但你可以删除它。
猜你喜欢
  • 1970-01-01
  • 2016-11-22
  • 2015-05-27
  • 2010-12-08
  • 2017-03-19
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 2011-11-02
相关资源
最近更新 更多