现在连接到数据库A上面,
需要为数据库B创建一个存储过程。创建表是用create table msdb.dbo.Table1()
我刚才试了下,创建存储过程不行。

解决方案 »

  1.   

    既然在同一个服务器上,为何不用use B切换到另外一个数据库呢.
      

  2.   

    CREATE PROCEDURE 不允许将数据库名称指定为对象名前缀。
    ---------
    所以楼主的想法是不行的.
      

  3.   

    关于跨库执行存储过程的问题_MS-SQLServer论坛_基础类
      

  4.   

    有两个数据库A,B
    在A库的存储过程调用B库的存储过程,
    在查询分析器下执行没有问题,但是web调用却不行.
    原因是 在A库使用network service 用户执行的,但是
    在B库确没有这个用户,在B库加上这个用户,程序正常执行.
      

  5.   

    --try:
    在B上首先创建一个动态执行SQL的过程在B上再要创建时通过把SQL传参给那个动态SQL的过程
      

  6.   

    既然在同一个服务器上,为何不用use B切换到另外一个数据库呢.一般来说也就是调用其他库的存储过程.==============================================我是楼主。这些我也想过,但好像解决不了我遇到的问题。我要做一个系统的数据库安装程序,假设为数据库A在初始化数据库A以后,需要在数据库msdb里面建一个存储过程。因为msdb是服务器自带的,我不可能事先在这个里面写入什么存储过程,所以得通过数据库A的存储过程来为msdb创建一个存储过程。如果这样不行,那有什么别的方法能为msdb创建存储过程吗?
      

  7.   


    跨库执行简单的啊,直接exec db2.dbo.proc就可以了。要跨库创建。
      

  8.   

    你要在数据库A中建存储过程到数据库B,用动态Sql就好了USE Aexec ('CREATE PROCEDURE dbo.Test1
    AS
    print ''这里写需要建立的内容,注意如果有单引号就写两个,当然还有其他更好的办法''exec Test1')exec B.dbo.test1
      

  9.   

    SQL codeUSE Aexec ('USE B --刚才居然忘了写了CREATE PROCEDURE dbo.Test1
    AS
    print ''这里写需要建立的内容,注意如果有单引号就写两个,当然还有其他更好的办法''exec Test1')exec B.dbo.test1
      

  10.   

    这个我试过的,会提示CREATE PROCEDURE 必须放在第一句。
      

  11.   

    exec ('  USE B; --刚才居然忘了写了 ,还有个 ; 也一起忘了,歹势!CREATE PROCEDURE dbo.Test1  
    AS  
    print ''这里写需要建立的内容,注意如果有单引号就写两个,当然还有其他更好的办法''  exec Test1  ')  
      

  12.   


    是这样啊,好像是说CREATE PROCEDURE dbo.Test1   这句话前面不能有任何语句,也就是说不能有USE B,不然会有运行错误。
      

  13.   

    是不行,craete table 可以,我以外是一样的,结果不行,没有测试一下代码就放上来,不好意思了浪费了LZ的时间
      

  14.   

    过程B已经在B上,不要再use B  了吧
      

  15.   


    我是做的一个数据库的安装程序,要在msdb里面创建一个存储过程。msdb里面事先肯定是跟我这个数据库相关的东西什么都没有了。
      

  16.   

    >>>>>>>>>>>>>>>>>>>>>>>>>>
      

  17.   


    use 另一个数据库名
    create proc 名
    ……
    use 原来的数据库名
      

  18.   

    既然在同一个服务器上,为什么不用use切换然后创建?
      

  19.   

    我觉得楼主可以尝试下这样一个方法,我先在自己机子上的数据库msdb里把需要的对象全部都建好,然后做一个备份,在初始化第一个数据库后,将备份还原到msdb上去,这样就可以有你需要的对象了,还原前记得先把访问msdb的所有进程杀死。
      

  20.   

    从来没考虑过这个问题,测试一下:use master
    go
    create procedure tempdb.dbo.p_test
    as
    select 1
    go消息 166,级别 15,状态 1,第 1 行
    'CREATE/ALTER PROCEDURE' 不允许将数据库名称指定为对象名前缀。
      

  21.   

    还原MSDB不大显示吧,这个是公共数据库,不能保证其他软件没用到这个数据库啊。
      

  22.   

    我现在的做法是写个创建存储过程的.SQL文件放在安葬包里面,然后在程序中连接到msdb,在程序中调用.sql文件,执行。但这样总感觉不太好。
      

  23.   

    地球人都这么用~
    use [msdb]
    go
    create proc test
    as
    .....go
    grant exec on test to public
    go
    use [yourdatabasehere]
    go
    create proc test2
    as
    ....
    go
      

  24.   

    在库A中为Msdb中创建存储过程ProcTest如:
    master..xp_execresultset N'select ''create proc ProcTest as select getdate()''',N'Msdb'