Cari Database Microsoft SQL Server untuk Data Tersimpan
Pernahkah Anda menguraikan database dan mengidentifikasi kolom mana yang memiliki data yang Anda butuhkan?
Baru-baru ini saya harus bekerja dengan mengekstraksi data dari database SQL untuk digunakan di Microsoft Access dan Power BI, sayangnya struktur penamaan database tidak terlalu intuitif.
Satu-satunya panduan yang saya miliki adalah laporan yang menunjukkan contoh data yang perlu diekstraksi, dengan label yang tidak mengacu pada nama kolom. Ini bisa berarti berjam-jam bekerja mencari database dan meninjau setiap tabel, database khusus ini memiliki 288 tabel.
Saya telah menggunakan kode di masa lalu untuk mencari kolom dalam tabel, tetapi dalam kasus ini itu tidak akan membantu saya.
Untungnya, saya menemukan artikel yang sangat menarik https://stackoverflow.com/questions/15757263/find-a-string-by-searching-all-tables-in-sql-server-management-studio-2008, ini sempurna untuk kebutuhan saya. Saya hanya perlu mengatur variabel dengan teks yang saya cari dan menjalankan kodenya. Dalam hitungan detik saya diberikan daftar tabel dan kolom tempat teks muncul. Tak lama kemudian saya memiliki daftar tabel dan kolom yang perlu saya sertakan dalam proyek saya.
Harap dicatat solusi ini hanya berlaku untuk tabel SQL Server dan dijalankan di SQL Server Management Studio. Anda juga perlu memiliki instance SQL Server yang mendukung variabel tabel.
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
Saya harap ini membantu Anda juga!