语句:EXEC sp_addlinkedserver
 @server = 'SQD830',
 @srvproduct = '',
 @provider='MSDASQL',
 @provstr='Driver={AS400830};Server=210.76.128.27;UID=budgetuser;PWD=budget;'
--查询语句
select * from [SQD830].bwhwh51.xx10--执行总是提示:
Msg 208, Level 16, State 1, Line 1
Invalid object name 'SQD830.bcdcd51.xx10'.--其中数据库bwhwh51及表名xx10是没有问题的那问题到底在哪呢?

解决方案 »

  1.   

    不同服务器数据库之间的数据操作--创建链接服务器 
    exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 
    select * from ITSV.数据库名.dbo.表名 --导入示例 
    select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器 
    exec sp_dropserver  'ITSV ', 'droplogins ' --连接远程/局域网数据(openrowset/openquery/opendatasource) 
    --1、openrowset --查询示例 
    select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --生成本地表 
    select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --把本地表导入远程表 
    insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) 
    select *from 本地表 --更新本地表 
    update b 
    set b.列A=a.列A 
     from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b 
    on a.column1=b.column1 --openquery用法需要创建一个连接 --首先创建一个连接创建链接服务器 
    exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    --查询 
    select * 
    FROM openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') 
    --把本地表导入远程表 
    insert openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') 
    select * from 本地表 
    --更新本地表 
    update b 
    set b.列B=a.列B 
    FROM openquery(ITSV,  'SELECT * FROM 数据库.dbo.表名 ') as a  
    inner join 本地表 b on a.列A=b.列A --3、opendatasource/openrowset 
    SELECT   * 
    FROM   opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta 
    --把本地表导入远程表 
    insert opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名 
    select * from 本地表  
      

  2.   

    乌龟,我要的是连接ODBC阿,你说的都是连 sqlserver吧!
      

  3.   

    --查询语句 
    select   *   from   [SQD830].bwhwh51.xx10 -->--查询语句 
    select   *   from   [SQD830].bwhwh51.dbo.xx10 
    应该是4段的,自己看看少了哪一段
      

  4.   

    @provstr='Driver={AS400830};Server=210.76.128.27;UID=budgetuser;PWD=budget;'
    好像是连接sql server的写法odbc可以两种用法EXEC sp_addlinkedserver
     @server = 'SQD830',
     @srvproduct = '',
     @provider='MSDASQL',
     @datasrc =[ODBC 数据源的系统 DSN]或者EXEC sp_addlinkedserver
     @server = 'SQD830',
     @srvproduct = '',
     @provider='MSDASQL',
     @provstr=[ODBC 连接字符串]
    [ODBC 数据源的系统 DSN]   可以取控制面板的数据源名称
    [ODBC 连接字符串]     最好在数据源中调试好粘贴过来
      

  5.   

    ODBC连接的是IBM 的AS400 DB2数据库
    好像就应该没有dbo的。
    以前用2000别的同事写的dts里就是这么写的然后现在用2005,我嫌ssis麻烦,就打算直接用语句来连接查询。
      

  6.   

    没有dbo 可以用.代替[SQD830].bwhwh51.xx10 这样的格式肯定不行的,用 [SQD830].bwhwh51...xx10 试试有点类似连 Excel 的方式
      

  7.   

    多谢楼上的,加点的话题是:
    Msg 117, Level 15, State 1, Line 1
    The object name 'sqd830.BWHWH51...XX10' contains more than the maximum number of prefixes. The maximum is 3.而且我觉得这样应该是没有问题的
    因为以前在2000的dts里面这样写是没有问题的
      

  8.   

    to:HaiwerEXEC sp_addlinkedserver
     @server = 'SQD830',
     @srvproduct = '',
     @provider='MSDASQL',
     @provstr=[ODBC 连接字符串]这种连接方式的 ODBC连接字符串如何取得的呢?没有用过,很白吃~~~  -_-!!
      

  9.   

    你现在用的就是ODBC连接字符串的方法,有点怀疑你的串是否正确,DB2没用过,正确的不会写如果用.,中间应该两个点,不是三个,虽然怀疑不是这个问题,试试无妨
     [SQD830].bwhwh51..xx10   
      

  10.   

    如果你有环境,可以用ado的控件连接,只要连接上了,再复制下ado控件的连接串,应该就可用
      

  11.   

    'sqd830.BWHWH51...XX10'   三个点了...
      

  12.   

    多谢楼上的,加点的话题是: 
    Msg   117,   Level   15,   State   1,   Line   1 
    The   object   name   'sqd830.BWHWH51...XX10'   contains   more   than   the   maximum   number   of   prefixes.   The   maximum   is   3. ----linkserver.database.dbo.tablename 多了一个了吧