Access
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Access

Tìm kiếm Cơ sở dữ liệu Microsoft SQL Server cho dữ liệu được lưu trữ

Tìm kiếm Cơ sở dữ liệu Microsoft SQL Server cho Dữ liệu được Lưu trữ

Bạn đã bao giờ phải giải mã cơ sở dữ liệu và xác định cột nào có dữ liệu bạn cần chưa?

Gần đây tôi đã phải làm việc với việc trích xuất dữ liệu từ cơ sở dữ liệu SQL để sử dụng trong Microsoft Access và Power BI, tiếc là cấu trúc đặt tên của cơ sở dữ liệu này không trực quan lắm.

Hướng dẫn duy nhất mà tôi có là một báo cáo hiển thị ví dụ về dữ liệu cần được trích xuất, với các nhãn không có tham chiếu đến tên cột. Điều này có nghĩa là hàng giờ làm việc tìm kiếm cơ sở dữ liệu và xem xét từng bảng, cơ sở dữ liệu cụ thể này có 288 bảng.

Trước đây, tôi đã sử dụng mã để tìm kiếm một cột trong bảng, nhưng trong trường hợp này, điều đó không giúp được gì cho tôi.

May mắn thay, tôi đã xem qua một bài viết rất thú vị https://stackoverflow.com/questions/15757263/find-a-string-by-searching-all-tables-in-sql-server-management-studio-2008, điều này thật hoàn hảo cho nhu cầu của tôi. Tôi chỉ cần đặt biến với văn bản mà tôi đang tìm kiếm và chạy mã. Trong vài giây, tôi đã được cung cấp danh sách các bảng và cột nơi văn bản xuất hiện. Chẳng bao lâu, tôi đã có một danh sách các bảng và cột mà tôi cần đưa vào dự án của mình.

Xin lưu ý rằng giải pháp này chỉ áp dụng cho các bảng SQL Server và được chạy trong SQL Server Management Studio. Bạn cũng cần có phiên bản SQL Server hỗ trợ các biến bảng.

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

Tôi hy vọng điều này cũng giúp bạn!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng OASIS-SVN và git để kiểm soát mã nguồn Access

  2. Gán hình ảnh cho các mục ListView Hướng dẫn-03

  3. Hướng dẫn điều khiển Activex ListView-01

  4. Bốn lầm tưởng phổ biến về công nghệ đám mây

  5. Tránh xung đột số với chuỗi Microsoft SQL