现在有2个SQL server服务器 A 和 B在A上执行 exec (select * from B.dbo.Table)想获取 select * from B.dbo.Table  的进程号 有没有的大哥知道 如何获取?exec (select @@spid  select * from B.dbo.Table) ----用这个方法是不行的,这样的spid是A服务器的

解决方案 »

  1.   

    select * from B.dbo.Table  这个是大概写了下  表示这么个意思而已
    不是同一台电脑上的2个数据库
    是不同电脑上的 不同数据库
      

  2.   

    SELECT a.*
    FROM OPENROWSET('SQLOLEDB','server';'sa';'password',
       'SELECT @@spid') AS a
    GO
      

  3.   

    突发奇想的获取,参考4F。
    长期获取,正确的方式是先建立链接服务器,再查询异地SERV的数据库SPID。
      

  4.   

    关于连接链接SERV:
    http://blog.csdn.net/claro/archive/2009/07/03/4317900.aspxhttp://blog.csdn.net/claro/archive/2010/08/09/5798156.aspx
      

  5.   

    估计他应该从sys.processes取SPID。
      

  6.   

    试试select * from b.master.sys.sysprocesses where hostname='A'
      

  7.   

    看了下,因该只有4楼理解了我的意思,还是感谢大家的
    我的意思是
    A服务器连接到B服务器去操作一些数据
    那么会在B服务器上创建一个进程,A服务器操作数据的时候,同时会把当前进程号当成数据放入表中
    与此同时,还有c,d,e,f机器在操作B服务器相同的表
    那么接下来我要对A服务器在B服务器上插入的数据进行删除
    如果不加判断那么会同时删除c,d,e,f创建的数据
    所以要用进程号来判断是哪个进程创建的数据,只有当前进程能删除自己创建的数据
      

  8.   

    插入数据时,添加当前库的机器名用于区分以及时间,总比spid强。
      

  9.   

    所以要用进程号来判断是哪个进程创建的数据,只有当前进程能删除自己创建的数据不妨试试判断select @@SERVERNAME会好一些。
      

  10.   

    如果同一机器上有2次操作 不就不可以了更主要的不是我想这么做,是U8里面这么做的,现在我要上传入库数据给U8,就是这个进程号的问题,搞的有时候库存量更新了(正好本地进程和U8服务器进程相同),大多时候库存量不变,搞死我了
      

  11.   

    如果同一机器上有2次操作 不就不可以了
    当前库的机器名+时间,您认为还不行吗?
    select @@SERVERNAME+ltrim(SYSDATETIME() )
      

  12.   

    原来有前提。这要看进程号是U8分配的,还是通过DBserv分配的。
      

  13.   

    我是第三方,客户买的U8,现在我要将数据写到U8里,4楼的方法不行,虽然取了出来,但是进程号和我执行的进程号不同,除非我的代码要全部改动所有的都放 OPENROWSET 第五个参数里执行,否则进程号不同目前我的做法是 在U8里创建了一个存储过程用来获取进程号,然后用同一个链接去执行这个存储过程获取进程号,再给下面使用,正在测试中,不知道是否能成功。