假设有链接服务器B,服务器B上有 db 数据库DECLARE @tempTable TABLE(F_Name NVARCHAR(50))-- 查询数据放入本地表变量-- 第一句会出错
INSERT INTO @tempTable exec B.db.dbo.sp_executesql N'select distinct f_name from t'--第二句正常
INSERT INTO @tempTable exec sp_executesql N'select distinct f_name from B.db.dbo.t'SELECT * FROM @tempTable
为什么第一句会出错呢?
提示错误“没有活动的事务”

解决方案 »

  1.   

    因为 
    dbo.sp_executesql 
    不是B的,
    而是你的.
      

  2.   

    sp_executesql 是master库的系统存储过程,调用本地的就可以了
      

  3.   

    下面这样是正常的
    exec B.db.dbo.sp_executesql N'select distinct f_name from t'就是不加 Insert Into 
      

  4.   

    use [db]
    go
    --T表在DB在這實例上?
    DECLARE        @tempTable        TABLE(F_Name NVARCHAR(50))-- 查询数据放入本地表变量-- 第一句会出错
    INSERT INTO @tempTable exec B.db.dbo.sp_executesql N'select distinct f_name from t'
      

  5.   


    是的,T 表就db的实例上
      

  6.   

    用AT連接
    -- 第一句会出错
    INSERT INTO @tempTable exec B.db.dbo.sp_executesql N'select distinct f_name from t'--改為INSERT INTO @tempTable EXECUTE ('select distinct f_name from db.dbo.t') AT B;
      

  7.   

    declare @a varchar(20)SELECT @a=groupname
    FROM OPENROWSET('SQLNCLI', 'Server=远程IP;Uid=sa;Pwd=pwd',
         'select * from dbname.dbo.tablename where ...') AS a;
    select @a
      

  8.   

    SQL2005以上用AT同樣支持傳參用法 
      

  9.   

    这两句话的不同点,我个人理解的意思是,
    第一句调用远程服务器上的存储过程执行SQL语句
    第二句调用本地服务器上的存储过程执行SQL语句查询远程服务器上的数据
      

  10.   

    其它方法實現 
    http://topic.csdn.net/u/20080612/22/bb2dfa83-1cf3-4a0b-9bd4-5a39e6193556.html
      

  11.   

    如果是表的话,参考:create table #t(a varchar(20))
    insert into #t (a)
    SELECT 字段 FROM OPENROWSET('SQLNCLI', 'Server=远程IP;Uid=sa;Pwd=pwd',
       'select * from dbname.dbo.tablename where ...') AS a;
         go
    select * from  #t
      

  12.   

    已经做好了连接服务器了啊,不需要再做数据源的方式打开远程数据库了
    面且,其实我的链接服务器名是动态传入的,可以变,也可以没有DECLARE @tempTable TABLE(F_Name NVARCHAR(50))
    DECLARE @exec NVARCHAR(4000)
    DECLARE @SQL NVARCHAR(4000)
    -- 这里当链接服务器名改变时,也会改变,如果没有就取本地表了
    SET @EXEC='exec ascenter.mkcenter.dbo.sp_executesql @sql'
    set @sql='SELECT DISTINCT F_DishTypeMain FROM V_BillByDishType WHERE NOT F_DishTypeMain IS NULL'
    INSERT INTO @tempTable EXEC sp_executesql @exec, N'@sql NVARCHAR(4000)', @SQL
    SELECT * FROM @tempTable
      

  13.   


    SQL Server是什麼版本?2000