SQL server 2000
declare @ExecSql varchar(500)set @ExecSql='exec sp_addlinkedserver ''orab'',''oracle'',''msdaora'',''stat'''
exec(@ExecSql)
set @ExecSql='exec sp_addlinkedsrvlogin ''orab'',''false'',''sa'',''bss'',''bss'''
exec(@ExecSql)--表名product_hm4
select * from orab..BSS.USER_TABLES
--消息 7314,级别 16,状态 1,第 1 行
--OLE DB 提供程序 'orab' 不包含表 '"BSS"."USER_TABLES"'。该表可能不存在,或当前用户没有使用该表的权限。set @ExecSql='exec sp_dropserver ''orab'',''droplogins'''
exec(@ExecSql)在SQL PLUS 中确可以查询USER_TABLES , SQL中提示表可能不存在,这是为什么?如何解决?
declare @ExecSql varchar(500)set @ExecSql='exec sp_addlinkedserver ''orab'',''oracle'',''msdaora'',''stat'''
exec(@ExecSql)
set @ExecSql='exec sp_addlinkedsrvlogin ''orab'',''false'',''sa'',''bss'',''bss'''
exec(@ExecSql)--表名product_hm4
select * from orab..BSS.USER_TABLES
--消息 7314,级别 16,状态 1,第 1 行
--OLE DB 提供程序 'orab' 不包含表 '"BSS"."USER_TABLES"'。该表可能不存在,或当前用户没有使用该表的权限。set @ExecSql='exec sp_dropserver ''orab'',''droplogins'''
exec(@ExecSql)在SQL PLUS 中确可以查询USER_TABLES , SQL中提示表可能不存在,这是为什么?如何解决?
如果是,去掉用户名前缀试试
select * from user_tables
select * from orab...USER_TABLES
select * from orab..SYS.USER_TABLES 这两种方法都不行,
select * from user_tables 这样查询的是SQL SERVER ,
SELECT * FROM SYS.dba_tables
where owner='BBS' and table_name=?;类似这样的。当然BBS首先需要有dba_tables的select权限。
在SQL SERVER里提示“该表可能不存在,或当前用户没有使用该表的权限”,
连接是没有问题的,select top 10 * from orab..BSS.PRODUCT_HM4,显示了10条记录
可否考虑把BBS用户的所有表名,存在一张物理表里。
create table mytables as select table_name from user_tables;然后select * from mytables;
当然,这样维护起来麻烦些,新建表后,需要向该表中插入数据。手工维护