SQL Server版本-2008 R2
我正在评估DMS解决方案,目的是接管维护工作。原始解决方案具有一个中央数据库,该数据库具有与制造商有关的数据。每个经销商还有一个数据库,这意味着存在很多跨数据库依赖项。
问题:
第一步,我建议您彻底清理数据库,这对于了解对象依赖关系(包括跨数据库依赖关系)至关重要。我尝试使用Red
Gate的解决方案,但输出的内容太多。我想要的只是数据库中没有任何依赖关系的对象列表-它们既不依赖于其他对象,也没有依赖于这些对象的任何对象。
这是我用来获取依赖项列表的脚本:
SELECT
DB_NAME() referencing_database_name,
OBJECT_NAME (referencing_id) referencing_entity_name,
ISNULL(referenced_schema_name,'dbo') referenced_schema_name,
referenced_entity_name,
ao.type_desc referenced_entity_type,
ISNULL(referenced_database_name,DB_NAME()) referenced_database_name
FROM sys.sql_expression_dependencies sed
JOIN sys.all_objects ao
ON sed.referenced_entity_name = ao.name
我将创建一个表-Dependencies-
将每个数据库的结果集插入到该表中。下一步,我还将创建另一个表AllObjects,该表将包含数据库中所有对象的列表。这是执行此操作的脚本:
SELECT
DB_NAME() DBName,
name,
type_desc
FROM sys.all_objects
WHERE type_desc IN
(
'VIEW',
'SQL_TABLE_VALUED_FUNCTION',
'SQL_STORED_PROCEDURE',
'SQL_INLINE_TABLE_VALUED_FUNCTION',
'USER_TABLE',
'SQL_SCALAR_FUNCTION'
)
现在,此表中没有出现在依赖关系表的referenced_entity_name列中的名称列表应提供我要查找的对象列表。
SELECT
AO.DBName,
AO.name,
AO.type_desc
FROM AllObjects AO
LEFT OUTER JOIN Dependencies D ON
D.referenced_database_name = AO.DBName AND
D.referenced_entity_name = AO.name AND
D.referenced_entity_type = AO.type_desc
WHERE
D.referenced_database_name IS NULL AND
D.referenced_entity_name IS NULL AND
D.referenced_entity_type IS NULL
现在的问题:
提前致谢,
拉吉
您可以将结果与以下脚本找到的结果进行比较。下面是完整的文章
CREATE PROCEDURE [dbo].[get_crossdatabase_dependencies] AS
SET NOCOUNT ON;
CREATE TABLE #databases(
database_id int,
database_name sysname
);
INSERT INTO #databases(database_id, database_name)
SELECT database_id, [name]
FROM sys.databases
WHERE 1 = 1
AND [state] <> 6 /* ignore offline DBs */
AND database_id > 4; /* ignore system DBs */
DECLARE
@database_id int,
@database_name sysname,
@sql varchar(max);
CREATE TABLE #dependencies(
referencing_database varchar(max),
referencing_schema varchar(max),
referencing_object_name varchar(max),
referenced_server varchar(max),
referenced_database varchar(max),
referenced_schema varchar(max),
referenced_object_name varchar(max)
);
WHILE (SELECT COUNT(*) FROM #databases) > 0 BEGIN
SELECT TOP 1 @database_id = database_id,
@database_name = database_name
FROM #databases;
SET @sql = 'INSERT INTO #dependencies select
DB_NAME(' + convert(varchar,@database_id) + '),
OBJECT_SCHEMA_NAME(referencing_id,'
+ convert(varchar,@database_id) +'),
OBJECT_NAME(referencing_id,' + convert(varchar,@database_id) + '),
referenced_server_name,
ISNULL(referenced_database_name, db_name('
+ convert(varchar,@database_id) + ')),
referenced_schema_name,
referenced_entity_name
FROM ' + quotename(@database_name) + '.sys.sql_expression_dependencies';
EXEC(@sql);
DELETE FROM #databases WHERE database_id = @database_id;
END;
SET NOCOUNT OFF;
SELECT * FROM #dependencies;
问题内容: 如何在存储过程中获取特定数据库的数据库名称。 问题答案: 要获取当前的数据库名称,请使用。 DB_NAME(Transact-SQL)
假设我在gradle.build文件中定义了以下库: 现在,其中一些库依赖于其他库。给定库名,是否有方法知道给定库所依赖的库列表?我只对webapp项目的那些库的名称和版本感兴趣。我试着阅读Bintray API,但找不到在那里做它的方法。 编辑: 我不是在找我的应用程序的依赖关系树(即命令)。我只是对构建一个web app感兴趣,其中用户提供任何项目(托管在JCenter上的Maven中),we
问题内容: 我需要找到函数/过程(在包体内定义)和它们使用的表之间的依赖关系。 我试过了,但它仅在包级别有效,而在内部功能/过程级别无效。是否有可能使用eg找到这种依赖关系? 在此先感谢您的帮助。 问题答案: 无法找到过程(在包中)和表之间的依赖关系。 有几种工具可以检查依赖关系。正如您已经发现的那样,仅在每个包级别上跟踪对象依赖关系。有一个整洁的工具PL / Scope 可以跟踪软件包各部分之间
问题内容: 我一直在尝试找到如何使用spaCy获取依赖关系树,但是我找不到如何获取树的任何内容,仅能找到如何导航树的内容。 问题答案: 事实证明,该树可通过文档中的令牌使用。 您是否要查找树的根,可以只浏览文档: 为了浏览树,令牌具有API来通过子代
问题内容: 如标题中所指定,我想在sqlserver中获取数据库名称,我所知道的所有信息都是数据源名称,用于获取Connection对象的登录名/密码,请在Java中显示一些有关如何正确检索数据库名称的指针,谢谢! 甚至 问题答案: 从连接对象获取一个实例。 数据库名称可以通过或方法获得(取决于JDBC驱动程序的供应商)。 或使用或方法。 如果您有兴趣获得Oracle数据库服务器或Oracle数据
在移动和PC的flutter应用程序上工作,移动插件通常涵盖iOS和android,因此移动的代码库保持不变。现在有了PC和Web,插件并不适用于所有平台。在dart.io有Platform.isIOS等可以根据平台更改行为,但仅限于运行时。例如,如果Windows上不存在插件,我需要在编译时有条件地导入插件。像相机、sqlite数据库、文件缓存等。有人说要让平台相关代码进入小部件等,但我仍然需要