Búsqueda de datos almacenados en la base de datos de SQL Server.
¿Alguna vez ha tenido que descifrar una base de datos e identificar qué columna tiene los datos que necesita?
Recientemente tuve que trabajar con la extracción de datos de una base de datos SQL para usar en Microsoft Access y Power Bi, desafortunadamente la estructura de nombres de la base de datos no era muy intuitiva.
La única guía que tenía era un informe que mostraba un ejemplo de los datos que debían extraerse, con etiquetas que no tenían referencia a los nombres de las columnas. Esto podría haber significado horas de trabajo buscando en la base de datos y revisando cada tabla, esta base de datos en particular tenía 288 tablas.
He usado código en el pasado para buscar una columna en tablas, pero en este caso eso no me ayudaría.
Afortunadamente, me encontré con un artículo muy interesante https://stackoverflow.com/questions/15757263/find-a-string-by-searching-all-tables-in-sql-server-management-studio-2008, esto fue perfecto para mis necesidades Simplemente necesitaba establecer la variable con el texto que estaba buscando y ejecutar el código. En cuestión de segundos recibí una lista de las tablas y columnas donde apareció el texto. En poco tiempo tenía una lista de las tablas y columnas que necesitaba incluir en mi proyecto.
Tenga en cuenta que esta solución se aplica solo a las tablas de SQL Server y se ejecuta en SQL Server Management Studio. También debe tener una instancia de SQL Server que admita variables de tabla.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | [crayon-62b7c01cefa65312079354 ]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 |
¡Espero que esto también te ayude!
Deja una respuesta