Access
 sql >> Base de données >  >> RDS >> Access

Rechercher dans la base de données Microsoft SQL Server les données stockées

Rechercher dans la base de données Microsoft SQL Server pour les données stockées

Avez-vous déjà dû déchiffrer une base de données et identifier quelle colonne contient les données dont vous avez besoin ?

J'ai récemment dû travailler avec l'extraction de données d'une base de données SQL à utiliser dans Microsoft Access et Power BI, malheureusement la structure de nommage de la base de données n'était pas très intuitive.

Le seul guide que j'avais était un rapport montrant un exemple des données qui devaient être extraites, avec des étiquettes qui n'avaient aucune référence aux noms de colonne. Cela aurait pu signifier des heures de travail à chercher dans la base de données et à examiner chaque table, cette base de données particulière comportait 288 tables.

J'ai utilisé du code dans le passé pour rechercher une colonne dans des tableaux, mais dans ce cas, cela ne m'aiderait pas.

Heureusement, je suis tombé sur un article très intéressant https://stackoverflow.com/questions/15757263/find-a-string-by-searching-all-tables-in-sql-server-management-studio-2008, c'était parfait pour mes besoins. J'avais simplement besoin de définir la variable avec le texte que je cherchais et d'exécuter le code. En quelques secondes, on m'a fourni une liste des tableaux et des colonnes où le texte apparaissait. En peu de temps, j'ai eu une liste des tables et des colonnes que je devais inclure dans mon projet.

Veuillez noter que cette solution s'applique uniquement aux tables SQL Server et est exécutée dans SQL Server Management Studio. Vous devez également disposer d'une instance SQL Server qui prend en charge les variables de table.

USE DATABASE_NAME
DECLARE @SearchStr nvarchar(100) = 'SEARCH_TEXT'
DECLARE @Results TABLE (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

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', 'int', 'decimal')
                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

J'espère que cela vous aidera aussi !