查找构建表的数据

时间:2016-07-22 14:07:55

标签: sql tsql sql-server-2012

嗨,大家好我已经停止了我的问题,我可以使用一些帮助。我正在尝试查找数据库中某个表的数据源,我已经检查了扩展属性,但是没有。

我已经设法跟踪从intermediate.view返回到临时数据库的路径,但是路径变冷了。

表中只有两列(comments和ref_no)。我尝试使用以下代码查找其他表格/观点,其中包含'评论'专栏但似乎没有任何内容;

USE [Database]
GO

SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME  LIKE 'comments'

ORDER BY COLUMN_NAME ASC

有什么想法吗?

2 个答案:

答案 0 :(得分:-1)

我假设其他表中的列可能与您试图弄清楚它是如何填充的表的列不同,一个建议是在staging DB中搜索一个值来自表,看看它是否在任何地方找到。可能还有很长的路要走,但可以缩小可以填充它的表格

DECLARE @SearchStr NVARCHAR(100) = 'searchForThis'
DECLARE @Results TABLE
(
 ColumnName NVARCHAR(370)
,ColumnValue NVARCHAR(3630)
)

DECLARE @TableName NVARCHAR(256)
,@ColumnName NVARCHAR(128)
,@SearchStr2 NVARCHAR(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%' ,'''')

WHILE @TableName IS NOT NULL
BEGIN
    SET @ColumnName = ''
    SET @TableName = (SELECT    MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
                      FROM      INFORMATION_SCHEMA.TABLES
                      WHERE     TABLE_TYPE = 'BASE TABLE'
                                AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
                                AND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) ,
                                                   'IsMSShipped') = 0
                     )

    WHILE (@TableName IS NOT NULL)
        AND (@ColumnName IS NOT NULL)
        BEGIN
            SET @ColumnName = (SELECT   MIN(QUOTENAME(COLUMN_NAME))
                               FROM     INFORMATION_SCHEMA.COLUMNS
                               WHERE    TABLE_SCHEMA = PARSENAME(@TableName ,2)
                                        AND TABLE_NAME = PARSENAME(@TableName ,1)
                                        AND DATA_TYPE IN ('char' ,'varchar' ,'nchar' ,'nvarchar')
                                        AND QUOTENAME(COLUMN_NAME) > @ColumnName
                              )

            IF @ColumnName IS NOT NULL
                BEGIN
                    INSERT  INTO @Results
                            EXEC
                                (
                                 'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName
                                 + ', 3630) 
            FROM ' + @TableName + ' (NOLOCK) ' + ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
                                )
                END
        END 
END

SELECT  ColumnName
   ,ColumnValue
FROM    @Results

只需更改@SearchStr

即可

编辑: 如果在数据库中找到该值,则显示结果的方式。 (我搜索了值John

enter image description here

答案 1 :(得分:-1)

如果您有一个数据来自的临时表,那么数据可能来自数据导入。因此,请查看与您的系统关联的SSIS包或运行应用程序代码的任何数据导入。

如果您目前正在进行审核(因为我认为所有生产数据库都应该),那么请在审核表中查找信息。

如果您没有审核并且数据正在发生变化,那么在该表上建立审核可以帮助您识别来源,因为您将知道用户将数据放入哪个日期时间。

您可能还会查看是否存在PK / FK关系,因为可能存在名为ref_no的任何内容。这应该告诉你这些数据与哪些表相关,并可能帮助你追踪它的来源。如果您没有PK / FK关系,那么您将需要搜索应用程序代码/ ORM以找到关系。

顺便说一句,另一个表中的ref_no更有可能找到一个有用的匹配而不是注释。注释列几乎从不相关,因为它们是您所在表中有关实体模型的注释。因此,您可能对用户或有关金融交易的注释有意见。这些评论通常并不相互关联。

另一种了解方法是询问长期使用该系统的人,他们可能会更深入地了解数据的来源。