同一个服务器上,怎样在一个数据库下为另外一个数据库建存储过程? 现在连接到数据库A上面,需要为数据库B创建一个存储过程。创建表是用create table msdb.dbo.Table1()我刚才试了下,创建存储过程不行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 既然在同一个服务器上,为何不用use B切换到另外一个数据库呢. CREATE PROCEDURE 不允许将数据库名称指定为对象名前缀。---------所以楼主的想法是不行的. 关于跨库执行存储过程的问题_MS-SQLServer论坛_基础类 有两个数据库A,B在A库的存储过程调用B库的存储过程,在查询分析器下执行没有问题,但是web调用却不行.原因是 在A库使用network service 用户执行的,但是在B库确没有这个用户,在B库加上这个用户,程序正常执行. --try:在B上首先创建一个动态执行SQL的过程在B上再要创建时通过把SQL传参给那个动态SQL的过程 既然在同一个服务器上,为何不用use B切换到另外一个数据库呢.一般来说也就是调用其他库的存储过程.==============================================我是楼主。这些我也想过,但好像解决不了我遇到的问题。我要做一个系统的数据库安装程序,假设为数据库A在初始化数据库A以后,需要在数据库msdb里面建一个存储过程。因为msdb是服务器自带的,我不可能事先在这个里面写入什么存储过程,所以得通过数据库A的存储过程来为msdb创建一个存储过程。如果这样不行,那有什么别的方法能为msdb创建存储过程吗? 跨库执行简单的啊,直接exec db2.dbo.proc就可以了。要跨库创建。 你要在数据库A中建存储过程到数据库B,用动态Sql就好了USE Aexec ('CREATE PROCEDURE dbo.Test1ASprint ''这里写需要建立的内容,注意如果有单引号就写两个,当然还有其他更好的办法''exec Test1')exec B.dbo.test1 SQL codeUSE Aexec ('USE B --刚才居然忘了写了CREATE PROCEDURE dbo.Test1ASprint ''这里写需要建立的内容,注意如果有单引号就写两个,当然还有其他更好的办法''exec Test1')exec B.dbo.test1 这个我试过的,会提示CREATE PROCEDURE 必须放在第一句。 exec (' USE B; --刚才居然忘了写了 ,还有个 ; 也一起忘了,歹势!CREATE PROCEDURE dbo.Test1 AS print ''这里写需要建立的内容,注意如果有单引号就写两个,当然还有其他更好的办法'' exec Test1 ') 是这样啊,好像是说CREATE PROCEDURE dbo.Test1 这句话前面不能有任何语句,也就是说不能有USE B,不然会有运行错误。 是不行,craete table 可以,我以外是一样的,结果不行,没有测试一下代码就放上来,不好意思了浪费了LZ的时间 过程B已经在B上,不要再use B 了吧 我是做的一个数据库的安装程序,要在msdb里面创建一个存储过程。msdb里面事先肯定是跟我这个数据库相关的东西什么都没有了。 >>>>>>>>>>>>>>>>>>>>>>>>>> use 另一个数据库名create proc 名……use 原来的数据库名 既然在同一个服务器上,为什么不用use切换然后创建? 我觉得楼主可以尝试下这样一个方法,我先在自己机子上的数据库msdb里把需要的对象全部都建好,然后做一个备份,在初始化第一个数据库后,将备份还原到msdb上去,这样就可以有你需要的对象了,还原前记得先把访问msdb的所有进程杀死。 从来没考虑过这个问题,测试一下:use mastergocreate procedure tempdb.dbo.p_testasselect 1go消息 166,级别 15,状态 1,第 1 行'CREATE/ALTER PROCEDURE' 不允许将数据库名称指定为对象名前缀。 还原MSDB不大显示吧,这个是公共数据库,不能保证其他软件没用到这个数据库啊。 我现在的做法是写个创建存储过程的.SQL文件放在安葬包里面,然后在程序中连接到msdb,在程序中调用.sql文件,执行。但这样总感觉不太好。 地球人都这么用~use [msdb]gocreate proc testas.....gogrant exec on test to publicgouse [yourdatabasehere]gocreate proc test2as....go 在库A中为Msdb中创建存储过程ProcTest如:master..xp_execresultset N'select ''create proc ProcTest as select getdate()''',N'Msdb' 数据库里,这么管理上传文件合理吗? 这样的SQL操作怎么写? 请教SQLSERVER 访问延迟的问题 一个老问题,树形数据的查询 [求助] 请教一句简单SQL sql变量问题! 关于SQLserver sa 找回密码问题(不是非法用途) 关系型数据库的结构,可不可以用简单的树型结构来表达? 关于ORACLE的sql loader 一个有关存储过程的问题!大侠请赐教! 问一个黑白痴的问题。 一个不好解决的问题
---------
所以楼主的想法是不行的.
在A库的存储过程调用B库的存储过程,
在查询分析器下执行没有问题,但是web调用却不行.
原因是 在A库使用network service 用户执行的,但是
在B库确没有这个用户,在B库加上这个用户,程序正常执行.
在B上首先创建一个动态执行SQL的过程在B上再要创建时通过把SQL传参给那个动态SQL的过程
跨库执行简单的啊,直接exec db2.dbo.proc就可以了。要跨库创建。
AS
print ''这里写需要建立的内容,注意如果有单引号就写两个,当然还有其他更好的办法''exec Test1')exec B.dbo.test1
AS
print ''这里写需要建立的内容,注意如果有单引号就写两个,当然还有其他更好的办法''exec Test1')exec B.dbo.test1
AS
print ''这里写需要建立的内容,注意如果有单引号就写两个,当然还有其他更好的办法'' exec Test1 ')
是这样啊,好像是说CREATE PROCEDURE dbo.Test1 这句话前面不能有任何语句,也就是说不能有USE B,不然会有运行错误。
我是做的一个数据库的安装程序,要在msdb里面创建一个存储过程。msdb里面事先肯定是跟我这个数据库相关的东西什么都没有了。
use 另一个数据库名
create proc 名
……
use 原来的数据库名
go
create procedure tempdb.dbo.p_test
as
select 1
go消息 166,级别 15,状态 1,第 1 行
'CREATE/ALTER PROCEDURE' 不允许将数据库名称指定为对象名前缀。
use [msdb]
go
create proc test
as
.....go
grant exec on test to public
go
use [yourdatabasehere]
go
create proc test2
as
....
go
master..xp_execresultset N'select ''create proc ProcTest as select getdate()''',N'Msdb'