Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 获取存储过程所在的数据库名称_Sql Server_Database_Sql Server 2008_Tsql_Stored Procedures - Fatal编程技术网

Sql server 获取存储过程所在的数据库名称

Sql server 获取存储过程所在的数据库名称,sql-server,database,sql-server-2008,tsql,stored-procedures,Sql Server,Database,Sql Server 2008,Tsql,Stored Procedures,我有SQL server 2008,其中有10个不同的数据库,现在我想搜索一个存储过程,该存储过程存在于哪个数据库中 被某些人称为复制品。。。。。没有正确阅读我的问题。我的要求是我需要验证“SP_电子邮件”程序。I此过程存在于哪个数据库。您需要查询主数据库的sys.databases,以获取数据库列表,对于获得的每个数据库名称,您需要查询db\u name.sys.procedures以检查其是否存在 尝试以下查询并给出反馈: use master go declare @FullQuery v

我有SQL server 2008,其中有10个不同的数据库,现在我想搜索一个存储过程,该存储过程存在于哪个数据库中


被某些人称为复制品。。。。。没有正确阅读我的问题。我的要求是我需要验证“SP_电子邮件”程序。I此过程存在于哪个数据库。

您需要查询主数据库的
sys.databases
,以获取数据库列表,对于获得的每个数据库名称,您需要查询
db\u name.sys.procedures
以检查其是否存在

尝试以下查询并给出反馈:

use master
go
declare @FullQuery varchar(max)
declare @DBName varchar(50)
set @FullQuery=''
declare cr cursor for select name from sys.databases where database_id > 4
open cr
fetch next from cr into @DBName
while(@@fetch_status=0)
begin
set @FullQuery=@FullQuery+
    ' select name  COLLATE SQL_Latin1_General_CP1_CI_AS from '+@DBName+'.sys.procedures where name like ''%proc_name%'' union'
fetch next from cr into @DBName
end
close cr
deallocate cr
set @FullQuery=substring(@FullQuery,1,len(@FullQuery)-5)
exec (@FullQuery)
如果没有这样的过程,它将返回
NULL
。如果所有数据库都在同一实例上,这将起作用。

您可以尝试以下方法:

EXEC sp_msforeachdb 
'if exists(select 1 from [?].sys.objects where name=''SP_Email'')
select ''?'' as FoundInDatabase from [?].sys.objects where name=''SP_Email'''
请试试这个

SELECT name DatabaseName
FROM sys.databases
WHERE OBJECT_ID(QUOTENAME(name) + '.dbo.ProcedureNameHere', 'P') IS NOT NULL;
这将返回此特定对象所在的数据库名称


用您的过程名称替换过程重命名。在你的情况下,这将是SP_电子邮件保持其余内容不变。

我必须在所有数据库中搜索。不,等一下,我会给出完整的查询,我正在匆忙发布(在问题初始编辑之前发布)耶,我将等待你的回答msg 468,16级,状态9,第1行无法解决两者之间的排序冲突“SQL拉丁语通用”和“拉丁语通用”“在UNION操作中。@Rahultripati,你说得对,但我没有使用sp_msforeachdb,因为你已经使用了它,我不想从sys执行copySELECT*。objects只会在下拉列表中选中数据库,而不是所有数据库中进行检查。@Dineshalla:-此查询非常有效。”。测试和验证!是的,我试过了,它显示命令已成功完成。我该怎么做。请更新您的query@Dineshalla:-单击结果窗口的结果选项卡!:)您将在其中找到数据库名称,它仅显示messages选项卡。您正在使用的版本。
SELECT name DatabaseName
FROM sys.databases
WHERE OBJECT_ID(QUOTENAME(name) + '.dbo.ProcedureNameHere', 'P') IS NOT NULL;