存储过程中是否可以切换到另外一个数据库?例如:
use test
go
create procedure dbo.m
as
begin
use test
select 1 
use new
select 2
end说明:
1.上面的代码是错误的
2.存储过程本身在库(test)中
3.要求存储过程中的代码一部分在库(test)中执行,如:select 1;一部分代码在库(new)中执行,如:select 2
4.要怎么实现?还请贴出代码来给个例子(如果不支持那就算了)不好意思,没多少分了,给的少还请多谅解

解决方案 »

  1.   

    use test
     go
     create procedure dbo.m
     as
     begin
     use test
     select 1 
     use new
     select * from new.dbo.2
     end如果在不同的数据库可以使用数据库名称。架构名称。表名实现
      

  2.   


    use test
    create procedure dbo.cssd
    as
    begin
    select 1 from test.dbo.sysobjects
    select 2 from WMS.dbo.sysobjects
    end
      

  3.   

    2楼你说的只是找数据(这个是可以的没有问题)
    如果我在new中的操作是create proce呢?
      

  4.   

    use test
     go
     create procedure dbo.m
     as
     begin
     use test
     select 1 
     use new
     exec ('create procedure t as begin select 2 end')
     end上面的是错的生成不了
    想问下这个怎么才能在new中生成?
      

  5.   

    就是:存储过程的脚本组合在test库中,但是生成要在new中
      

  6.   

    我现在的做法是把test库中创建的脚本插入到new库中一张表上,在这个表上加了个Insert触发器,让他自己生成。我只需要插入生成的脚本就好了。
    感觉是有点麻烦,所以才请教高手有没有更好的解决方案。
      

  7.   

    dbo.m是new库中的表create trigger [dbo].[tr_m] 
    on [dbo].[m]
    after insert
    as
    begin
        set NOCOUNT ON;
        declare @min int,@max int,@sql nvarchar(4000)
        set @min=1
        select @max=max(id) from dbo.m
        if @max is not null
        begin
    while(@min<=@max)
    begin
    select @sql=script from dbo.m where id=@min
    exec sp_executesql @sql
    set @min=@min+1
    end
        end
        truncate table dbo.m
    end
      

  8.   


    --这样好像可以
    create procedure cssd
    as
    begin
    exec (' USE WMS create procedure E1 as begin select 2 end')
    end
      

  9.   

    exec (' USE WMS create procedure E1 as begin select 2 end')
    这个是可以 但是exec (' USE WMS create trigger E1 on dbo.m after insert as begin select 2 end')这个是不可以的
      

  10.   

    master.dbo.xp_execresultset N'create proc[table|trigger]...','dbname'