¿Hay alguna manera de usar el estudio de administración de SQL Server para encontrar todas las columnas que tienen nombres de columna que contienen una determinada subcadena?

11

Estoy usando SQL Server Management Studio 2008.

Tengo una enorme base de datos heredada con miles de columnas. Sería bueno si pudiera buscar todas las columnas cuyos nombres contienen una determinada subcadena.

¿Alguien sabe como hacer esto?

¡Gracias!

IsaacB
fuente
1
Hago este tipo de cosas con mi propio script de archivo por lotes, usando un proyecto Java llamado schemacrawler para hacer el trabajo.
djangofan

Respuestas:

16

Mmhh podrías probar:

use <your_database>
select o.name,c.name 
from sys.columns c inner join sys.objects  o on c.object_id=o.object_id 
and o.type = 'U'
and CHARINDEX('<your_sub_string>', c.name)>=1
Stef
fuente
Ah, entonces no hay una buena pantalla de GUI para esto
IsaacB
Ok, que quieres exactamente :)?
Stef
sys.columns no parece existir para mí, lo estoy investigando
IsaacB
Si no puede "verlos" es porque no tiene los permisos correctos. ¿Puedes CONCEDER?
Stef
estaba consultando una antigua base de datos del servidor sql 2000 por accidente del estudio de 2008. Su guión funciona en realidad, muchas gracias.
IsaacB
2

Podría usar algunas herramientas de terceros como la búsqueda SQL de Red-Gate que son gratuitas.

jgardner04
fuente
Tengo algo de la puerta roja instalada, tal vez lo comprobaré y veré si tengo búsqueda SQL. ¡Gracias!
IsaacB
2

Puede usar las vistas INFORMATION_SCHEMA.

USE <database>

SELECT COLUMN_NAME
     , TABLE_NAME     
 FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%<string you are looking for>%'

Una trampa es asegurarse de USAR la base de datos correcta.

CTKeane
fuente
0
USE <database>;

Declare @Col varchar(10);
Declare @Val varchar(10);
Declare @tablename varchar(20);
Declare @sql nvarchar(200);
Declare @sql1 nvarchar(200);

SET @Col = '...';   --INSERT COLUMN NAME
SET @Val = ...; -- INSERT COLUMN VALUE

IF OBJECT_ID('tempdb.dbo.##TempTable1', 'U') IS NOT NULL
DROP TABLE ##TempTable1;

SELECT NULL AS MYKEY, name
into ##TempTable1
FROM sysobjects
WHERE id IN ( SELECT id FROM syscolumns WHERE name = @Col )
ORDER BY name asc

set rowcount 1

update ##TempTable1 set mykey = 1

while @@rowcount > 0
begin
    set rowcount 0

    set @tablename =  (select name from ##TempTable1 where mykey = 1)
    set @sql = 'If Exists (SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+') SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+';'
    set @sql1 = 'If Exists (SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+') select name from ##TempTable1 where mykey = 1'
    EXEC sp_executesql @sql1
    EXEC sp_executesql @sql

    delete ##TempTable1 where mykey = 1
        set rowcount 1
    update ##TempTable1 set mykey = 1
end
set rowcount 0
GeorgeB
fuente