master 数据库中的重复表和过程

ret*_*tif 3 sql-server sql-server-2014 master-system-database

我刚刚发现,该master数据库包含一些其他数据库的表和存储过程的重复项。

例如,我有一个SomeDB包含表的数据库justTable。出于某种原因,该表的副本master也在其中,但没有数据。

这怎么可能?我敢肯定,在创建这些表和过程时,我使用的是相应的数据库,而不是master. 它们都存在于这些数据库中(它们应该存在),只是还有一个副本master

我使用 Microsoft SQL Server Management Studio 2014 和 Redgate 添加(源代码控制和东西)。

Bra*_*don 6

您是否使用通过 SSMS 运行的脚本创建了表?

是否有可能如果你没有USE [SomeDB]在脚本的顶部包含,而是将当前的数据库设置为 master?

所以这样做:

坏的

取而代之的是:

好的

你可以看到,当一个特定的表是通过查看系统视图,如创建:

SELECT ObjectName = QUOTENAME(s.name) + '.' + QUOTENAME(o.name)
    , o.create_date
FROM sys.objects o
    INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE o.type_desc = 'USER_TABLE';
Run Code Online (Sandbox Code Playgroud)

这可以帮助您了解创建这些表的位置/时间。

查询结果:

在此处输入图片说明

如果您真的需要证明这些来自哪里,您可能希望在服务器级别创建一个 DDL 触发器来捕获诸如CREATE TABLE等的事件,但这超出了本答案的范围。服务器级 DDL 触发器将允许您为未来事件捕获所有数据定义事件;即它无助于解决这些现有表的来源。

  • @retif 是的,这是唯一有意义的事情,尤其是在您无法重现问题的情况下。如果它是可重复的,我会检查 DDL 触发器或作业 - 无论出于何种原因 - 复制您创建的每个表。 (2认同)