Access
 sql >> Baza danych >  >> RDS >> Access

Przeszukaj bazę danych Microsoft SQL Server pod kątem przechowywanych danych

Przeszukaj bazę danych Microsoft SQL Server pod kątem przechowywanych danych

Czy kiedykolwiek musiałeś rozszyfrować bazę danych i określić, która kolumna zawiera potrzebne dane?

Ostatnio musiałem pracować z wyodrębnianiem danych z bazy danych SQL do wykorzystania w Microsoft Access i Power BI, niestety struktura nazewnictwa bazy danych nie była zbyt intuicyjna.

Jedynym przewodnikiem, jaki miałem, był raport przedstawiający przykład danych, które należało wyodrębnić, z etykietami, które nie miały odniesienia do nazw kolumn. Mogło to oznaczać godziny pracy przeszukiwania bazy danych i przeglądania każdej tabeli, ta konkretna baza danych miała 288 tabel.

W przeszłości używałem kodu do wyszukiwania kolumny w tabelach, ale w tym przypadku to by mi nie pomogło.

Na szczęście trafiłem na bardzo ciekawy artykuł https://stackoverflow.com/questions/15757263/find-a-string-by-searching-all-tables-in-sql-server-management-studio-2008, było idealnie dla moich potrzeb. Po prostu musiałem ustawić zmienną z tekstem, którego szukałem i uruchomić kod. W ciągu kilku sekund otrzymałem listę tabel i kolumn, w których pojawił się tekst. Wkrótce miałem listę tabel i kolumn, które musiałem uwzględnić w moim projekcie.

Należy pamiętać, że to rozwiązanie dotyczy tylko tabel programu SQL Server i jest uruchamiane w programie SQL Server Management Studio. Potrzebna jest również instancja SQL Server, która obsługuje zmienne tabeli.

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

Mam nadzieję, że Tobie też pomoże!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pisanie czytelnego kodu dla VBA – wzór Try*

  2. 10 wskazówek oszczędzających czas dla użytkowników MS Access

  3. Unikaj tego powszechnego błędu podczas wykonywania procedury przechowywanej w programie MS Access

  4. Charakterystyka raportu

  5. Jak naprawić nowy typ danych, który powoduje problemy w MS Access?