Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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
访问另一个数据库中的sys.sql_模块_Sql_Sql Server 2008 - Fatal编程技术网

访问另一个数据库中的sys.sql_模块

访问另一个数据库中的sys.sql_模块,sql,sql-server-2008,Sql,Sql Server 2008,以下查询列出了数据库中的所有存储过程及其定义。它返回12行: USE [HQ-211-STOCK-DBO] SELECT OBJECT_NAME (object_id) AS sp_name, [definition] AS sp_definition FROM [HQ-211-STOCK-DBO].sys.sql_modules as st WHERE OBJECTPROPERTY (object_id, 'IsProcedure') = 1 当我更改查询的第一行以使用其他

以下查询列出了数据库中的所有存储过程及其定义。它返回12行:

USE [HQ-211-STOCK-DBO]

SELECT OBJECT_NAME (object_id) AS sp_name, 
       [definition] AS sp_definition
FROM [HQ-211-STOCK-DBO].sys.sql_modules as st
WHERE OBJECTPROPERTY (object_id, 'IsProcedure') = 1
当我更改查询的第一行以使用其他数据库时:

USE [HQ-193-STOCK-DBO]

SELECT OBJECT_NAME (object_id) AS sp_name, 
       [definition] AS sp_definition
FROM [HQ-211-STOCK-DBO].sys.sql_modules as st
WHERE OBJECTPROPERTY (object_id, 'IsProcedure') = 1
返回零行

现在更改查询的第4行(起始行)时:

我有一排被退回

似乎使用数据库名称作为前缀
sys.sql\u modules
的工作方式与我预期的不一样

有人能指出我做错了什么吗?为什么在引用
sys.sql\u modules
时不能指定db名称?

OBJECT\u name()
OBJECTPROPERTY()
查看当前数据库。停止使用它们。通常您不会得到匹配(这使得您的
WHERE
子句在第二次查询中返回0行-您可以通过只返回
object\u id
,然后检查当前数据库的
sys.objects
来确认这一点),但有时,如果两个数据库中的对象恰好具有相同的
object\u id
,则可能会得到错误的匹配

(.因此,即使在同一个数据库中,我强烈建议使用到其他目录视图的连接,而不是帮助器元数据函数。通常这不是问题,但我保证,它们在最不合适的时候会被阻止。)

相反,你可以说:

SELECT o.name AS sp_name, st.[definition] AS sp_definition
FROM [HQ-211-STOCK-DBO].sys.sql_modules as st
INNER JOIN [HQ-211-STOCK-DBO].sys.objects AS o
ON st.[object_id] = o.[object_id]
WHERE o.type = 'P';
SELECT o.name AS sp_name, st.[definition] AS sp_definition
FROM [HQ-211-STOCK-DBO].sys.sql_modules as st
INNER JOIN [HQ-211-STOCK-DBO].sys.objects AS o
ON st.[object_id] = o.[object_id]
WHERE o.type = 'P';