Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cari string di semua tabel, baris, dan kolom DB

Kode ini harus melakukannya di SQL 2005, tetapi beberapa peringatan:

  1. Ini sangat lambat. Saya mengujinya pada database kecil yang saya miliki dengan hanya beberapa tabel dan butuh beberapa menit untuk menyelesaikannya. Jika basis data Anda sangat besar sehingga Anda tidak dapat memahaminya, ini mungkin tidak akan dapat digunakan.

  2. Saya menulis ini secara spontan. Saya tidak melakukan penanganan kesalahan dan mungkin ada beberapa kecerobohan lainnya terutama karena saya tidak sering menggunakan kursor. Misalnya, saya pikir ada cara untuk me-refresh kursor kolom daripada menutup/mendeallokasi/membuat ulang setiap saat.

Jika Anda tidak dapat memahami database atau tidak tahu dari mana asalnya, maka Anda mungkin harus menemukan seseorang yang memahaminya. Bahkan jika Anda dapat menemukan di mana data itu berada, itu mungkin diduplikasi di suatu tempat atau mungkin ada aspek lain dari database yang tidak Anda pahami. Jika tidak ada seorang pun di perusahaan Anda yang memahami database, maka Anda berada dalam kekacauan yang cukup besar.

DECLARE
    @search_string  VARCHAR(100),
    @table_name     SYSNAME,
    @table_schema   SYSNAME,
    @column_name    SYSNAME,
    @sql_string     VARCHAR(2000)

SET @search_string = 'Test'

DECLARE tables_cur CURSOR FOR SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'

OPEN tables_cur

FETCH NEXT FROM tables_cur INTO @table_schema, @table_name

WHILE (@@FETCH_STATUS = 0)
BEGIN
    DECLARE columns_cur CURSOR FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @table_schema AND TABLE_NAME = @table_name AND COLLATION_NAME IS NOT NULL  -- Only strings have this and they always have it

    OPEN columns_cur

    FETCH NEXT FROM columns_cur INTO @column_name
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
        SET @sql_string = 'IF EXISTS (SELECT * FROM ' + QUOTENAME(@table_schema) + '.' + QUOTENAME(@table_name) + ' WHERE ' + QUOTENAME(@column_name) + ' LIKE ''%' + @search_string + '%'') PRINT ''' + QUOTENAME(@table_schema) + '.' + QUOTENAME(@table_name) + ', ' + QUOTENAME(@column_name) + ''''

        EXECUTE(@sql_string)

        FETCH NEXT FROM columns_cur INTO @column_name
    END

    CLOSE columns_cur

    DEALLOCATE columns_cur

    FETCH NEXT FROM tables_cur INTO @table_schema, @table_name
END

CLOSE tables_cur

DEALLOCATE tables_cur


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server :mengembalikan nama kolom berdasarkan nilai record

  2. Mengonfigurasi Grup Ketersediaan AlwaysOn - Bagian 2

  3. Hapus simpul xml dari kolom tabel SQL Server 2008 r2 berdasarkan nilai atribut

  4. Bagaimana cara mendapatkan Waktu dari format DateTime dalam SQL?

  5. SqlParameter sudah ditampung oleh SqlParameterCollection lain - Apakah using() {} curang?