¿Cómo puedo buscar en una base de datos SQL Server para una cadena?

Sé que es posible, pero no sé cómo.

Necesito buscar un SQL base de datos del Servidor para todas las menciones de una cadena específica.

Por ejemplo: me gustaría buscar todas las tablas, vistas, funciones, procedimientos almacenados, … para la cadena «tblEmployes» (no de datos dentro de las tablas).

Una de las razones por las que necesita este, es que me gustaría quitar algunos datos extra tablas que se crean, pero me temo que se puede utilizar en algún lugar en los procedimientos o funciones.

InformationsquelleAutor bobetko | 2012-02-07

15 Kommentare

  1. 144

    Esto buscará en cada columna de cada tabla en una base de datos específica. Crear el procedimiento almacenado en la base de datos que desea buscar.

    Las Diez Más Frecuentes SQL Server Preguntas Y Sus Respuestas:

    CREATE PROCEDURE FindMyData_String
        @DataToFind NVARCHAR(4000),
        @ExactMatch BIT = 0
    AS
    SET NOCOUNT ON
    
    DECLARE @Temp TABLE(RowId INT IDENTITY(1,1), SchemaName sysname, TableName sysname, ColumnName SysName, DataType VARCHAR(100), DataFound BIT)
    
        INSERT  INTO @Temp(TableName,SchemaName, ColumnName, DataType)
        SELECT  C.Table_Name,C.TABLE_SCHEMA, C.Column_Name, C.Data_Type
        FROM    Information_Schema.Columns AS C
                INNER Join Information_Schema.Tables AS T
                    ON C.Table_Name = T.Table_Name
            AND C.TABLE_SCHEMA = T.TABLE_SCHEMA
        WHERE   Table_Type = 'Base Table'
                And Data_Type In ('ntext','text','nvarchar','nchar','varchar','char')
    
    
    DECLARE @i INT
    DECLARE @MAX INT
    DECLARE @TableName sysname
    DECLARE @ColumnName sysname
    DECLARE @SchemaName sysname
    DECLARE @SQL NVARCHAR(4000)
    DECLARE @PARAMETERS NVARCHAR(4000)
    DECLARE @DataExists BIT
    DECLARE @SQLTemplate NVARCHAR(4000)
    
    SELECT  @SQLTemplate = CASE WHEN @ExactMatch = 1
                                THEN 'If Exists(Select *
                                              From   ReplaceTableName
                                              Where  Convert(nVarChar(4000), [ReplaceColumnName])
                                                           = ''' + @DataToFind + '''
                                              )
                                         Set @DataExists = 1
                                     Else
                                         Set @DataExists = 0'
                                ELSE 'If Exists(Select *
                                              From   ReplaceTableName
                                              Where  Convert(nVarChar(4000), [ReplaceColumnName])
                                                           Like ''%' + @DataToFind + '%''
                                              )
                                         Set @DataExists = 1
                                     Else
                                         Set @DataExists = 0'
                                END,
            @PARAMETERS = '@DataExists Bit OUTPUT',
            @i = 1
    
    SELECT @i = 1, @MAX = MAX(RowId)
    FROM   @Temp
    
    WHILE @i <= @MAX
        BEGIN
            SELECT  @SQL = REPLACE(REPLACE(@SQLTemplate, 'ReplaceTableName', QUOTENAME(SchemaName) + '.' + QUOTENAME(TableName)), 'ReplaceColumnName', ColumnName)
            FROM    @Temp
            WHERE   RowId = @i
    
    
            PRINT @SQL
            EXEC SP_EXECUTESQL @SQL, @PARAMETERS, @DataExists = @DataExists OUTPUT
    
            IF @DataExists =1
                UPDATE @Temp SET DataFound = 1 WHERE RowId = @i
    
            SET @i = @i + 1
        END
    
    SELECT  SchemaName,TableName, ColumnName
    FROM    @Temp
    WHERE   DataFound = 1
    GO

    Para ejecutarlo, basta con hacer:

    exec FindMyData_string 'google', 0

    Funciona increíblemente bien!!!

    • ¿qué hace el 2do param «exactMatch = 0» significa ?
    • Si usted mira la secuencia de comandos es sólo un parámetro que se comprueba en un caso de declaración de principios para decidir si la cadena de búsqueda con ‘valor’ o ‘%value%’
    • Esto sólo devuelve el resultado de la primera que encuentre, y nada más. Es allí una manera de devolver todas las instancias de la cadena en la base de datos?
    • ¿Dónde debo guardar este script y extensión de lo que hace el archivo necesita ser ejecutado? ¿Dónde puedo ejecutar exec FindMyData_string 'google', 0 ?
    • Algunas bases de datos no son sensibles a mayúsculas por favor utilice INFORMATION_SCHEMA.COLUMNAS en el código. De lo contrario, este script va a tirar ‘nombre de objeto no válido Information_Schema de error».
    • Funcionó bien, gracias.

  2. 58

    Si usted necesita para encontrar objetos de base de datos (por ejemplo, tablas, columnas, y desencadenadores) por su nombre – tener una mirada en el libre Redgate herramienta de Software denominada SQL Búsqueda que hace esto – se busca en su base de datos completa para cualquier tipo de cadena(s).

    ¿Cómo puedo buscar en una base de datos SQL Server para una cadena?

    ¿Cómo puedo buscar en una base de datos SQL Server para una cadena?

    Es una gran herramienta imprescindible para cualquier DBA o desarrollador de bases de datos – ¿ya mencioné que es absolutamente libre utilizar para cualquier tipo de uso??

    • Buena herramienta, pero no buscar cadenas de texto en tablas
    • No busca en las filas
    • se busca objetos de base de datos – las tablas, vistas, procedimientos almacenados, etc – por su nombre. No NO búsqueda en los datos contenidos en las tablas – nunca dije que lo hizo!
    • Permítanme citar parte de la pregunta me gustaría buscar todas las tablas, vistas, funciones, procedimientos almacenados, … para la cadena «tblEmployes». (No de datos dentro de las tablas) Si desea buscar datos dentro de la tabla T-lenguaje SQL. Esta herramienta es ideal para la refactorización de tareas.
  3. 45

    También puede intentar ApexSQL Search – es una SSMS complemento similar a Búsqueda SQL.

    Si usted realmente desea utilizar sólo SQL es posible que desee probar este script:

    select
    S.name as [Schema],
    o.name as [Object],
    o.type_desc as [Object_Type],
    C.text as [Object_Definition]
    from sys.all_objects O inner join sys.schemas S on O.schema_id = S.schema_id
    inner join sys.syscomments C on O.object_id = C.id
    where S.schema_id not in (3,4) -- avoid searching in sys and INFORMATION_SCHEMA schemas
    and C.text like '%ICE_%'
    order by [Schema]
    • ApexSQL Search es impresionante. Sin necesidad de secuencias de comandos con esta herramienta.
    • Esta es una estupenda ayuda de su compañero. Agradezco 😀
    • Esta consulta sólo la búsqueda de objetos. Necesitamos buscar una cadena en todas las tablas existentes.
    • ApexSQL a pesar de que hace un gran trabajo de lo que te permite elegir los tipos
  4. 18

    Usted puede exportar su base de datos (si es pequeño) a su disco duro y, a continuación, sólo hacer una cadena de búsqueda a través de un programa de búsqueda de texto o editor de texto.

    • Eso en realidad no es una mala idea.
    • 🙂 También puedes utilizar un guión demasiado. Pero un buen editor de texto podría hacer casi cualquier cosa que usted necesita para un código SQL.
    • Y que editor de texto sería feliz para cargar muchos GBs de datos?
    • Probablemente ninguno, pero en ese caso, usted puede utilizar a un tercero motor de búsqueda de archivos, y hay aplicaciones que se puede dividir el archivo en como muchos como usted desea.
    • MS SQL exportaciones son archivos binarios y por lo tanto no pueden ser exportados, leer o búsquedas utilizando el método propuesto.
  5. 17

    Para obtener una tabla de nombre en SQL Servidor:

    SELECT *
    FROM sys.Tables
    WHERE name LIKE '%Employees%'

    Para encontrar un procedimiento almacenado por nombre:

    SELECT name
    FROM sys.objects
    WHERE name = 'spName'

    Para obtener todos los procedimientos almacenados relacionada con una tabla:

    ----Option 1
    SELECT DISTINCT so.name
    FROM syscomments sc
    INNER JOIN sysobjects so ON sc.id=so.id
    WHERE sc.TEXT LIKE '%tablename%'
    ----Option 2
    SELECT DISTINCT o.name, o.xtype
    FROM syscomments c
    INNER JOIN sysobjects o ON c.id=o.id
    WHERE c.TEXT LIKE '%tablename%'
    • Este sólo las consultas de búsqueda de objetos. Necesitamos buscar una cadena en todas las tablas existentes.
  6. 5

    Esta búsqueda de código de procedimiento y función, pero no de la búsqueda en la tabla 🙂

    SELECT name FROM   sys.all_objects WHERE  Object_definition(object_id) LIKE '%text%' ORDER BY name
  7. 3

    Podría;

    1. Script de la base de datos en un solo archivo y busque el archivo de tblEmployees con un editor de texto. En SQL Server Management Studio (SSMS), haga clic derecho sobre la base de datos y elegir Generar secuencias de comandos.
    2. Uso SSMS de Vista de las Dependencias’ haciendo clic derecho sobre tblEmployees para ver qué otros objetos que dependen de él
    3. Utilice una herramienta de terceros, tales como Redgate del Software SQL Búsqueda para buscar todos los objetos de base de datos por nombre y contenido por palabra clave.
    • #1 suena bien. Simplemente no puedo ejecutarlo en el servidor de la causa no tengo los derechos de acceso.
    • Gracias. No estoy seguro de por qué alguien te dio -1. Me fijo que. Trató de RedGate… que totalmente no lo quiero.
  8. 2

    Este para buscar una cadena de más de cada base de datos:

    declare @search_term varchar(max)
    set @search_term = 'something'
    
    select @search_term = 'use ? SET QUOTED_IDENTIFIER ON
    select
        ''[''+db_name()+''].[''+c.name+''].[''+b.name+'']'' as [object],
        b.type_desc as [type],
        d.obj_def.value(''.'',''varchar(max)'') as [definition]
    from (
        select distinct
            a.id
        from sys.syscomments a
        where a.[text] like ''%'[email protected]search_term+'%''
    ) a
    inner join sys.all_objects b
        on b.[object_id] = a.id
    inner join sys.schemas c
        on c.[schema_id] = b.[schema_id]
    cross apply (
        select
            [text()] = a1.[text]
        from sys.syscomments a1
        where a1.id = a.id
        order by a1.colid
        for xml path(''''), type
    ) d(obj_def)
    where c.schema_id not in (3,4) -- avoid searching in sys and INFORMATION_SCHEMA schemas
        and db_id() not in (1,2,3,4) -- avoid sys databases'
    
    if object_id('tempdb..#textsearch') is not null drop table #textsearch
    create table #textsearch
    (
        [object] varchar(300),
        [type] varchar(300),
        [definition] varchar(max)
    )
    
    insert #textsearch
    exec sp_MSforeachdb @search_term
    
    select *
    from #textsearch
    order by [object]
  9. 2

    Mi versión…

    He denominado «la Aguja en el pajar», por razones obvias.

    Busca un valor específico en cada fila y cada columna, no para los nombres de columna, etc.

    Ejecutar la búsqueda (sustituir los valores para las dos primeras variables de curso):

    DECLARE @SEARCH_DB VARCHAR(100)='REPLACE_WITH_YOUR_DB_NAME'
    DECLARE @SEARCH_VALUE_LIKE NVARCHAR(100)=N'%REPLACE_WITH_SEARCH_STRING%'
    
    SET NOCOUNT ON;
    DECLARE col_cur CURSOR FOR
    SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE
    FROM information_schema.columns WHERE TABLE_CATALOG[email protected]SEARCH_DB AND DATA_TYPE NOT IN ('timestamp', 'datetime');
    
    DECLARE @TOTAL int = (SELECT COUNT(*)
    FROM information_schema.columns WHERE TABLE_CATALOG[email protected]SEARCH_DB AND DATA_TYPE NOT IN ('timestamp', 'datetime'));
    
    
    DECLARE @TABLE_CATALOG nvarchar(500), @TABLE_SCHEMA nvarchar(500), @TABLE_NAME nvarchar(500), @COLUMN_NAME nvarchar(500), @DATA_TYPE nvarchar(500);
    DECLARE @SQL nvarchar(4000)='';
    
    PRINT '-------- BEGIN SEARCH --------';
    OPEN col_cur;
    
    FETCH NEXT FROM col_cur INTO @TABLE_CATALOG, @TABLE_SCHEMA, @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE;
    
    BEGIN TRY DROP TABLE ##RESULTS; END TRY BEGIN CATCH END CATCH
    CREATE TABLE ##RESULTS( TABLE_CATALOG nvarchar(500), TABLE_SCHEMA nvarchar(500), TABLE_NAME nvarchar(500), COLUMN_NAME nvarchar(500), DATA_TYPE nvarchar(500), RECORDS int)
    DECLARE @SHOULD_CAST bit=0
    DECLARE @i int =0
    DECLARE @progress_sum bigint=0
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
        -- PRINT '' + CAST(@i as varchar(100)) +' of ' + CAST(@TOTAL as varchar(100)) + '  ' + @TABLE_CATALOG+'.'[email protected]_SCHEMA+'.'[email protected]_NAME+': '[email protected]_NAME+' ('[email protected]_TYPE+')';
    
        SET @SHOULD_CAST = (SELECT CASE @DATA_TYPE
                                    WHEN 'varchar' THEN 0
                                    WHEN 'nvarchar' THEN 0
                                    WHEN 'char' THEN 0
                                    ELSE 1 END)
    
        SET @SQL='SELECT '''[email protected]TABLE_CATALOG+''' catalog_name, '''[email protected]TABLE_SCHEMA+''' schema_name, '''[email protected]TABLE_NAME+''' table_name, '''[email protected]COLUMN_NAME+''' column_name, '''[email protected]DATA_TYPE+''' data_type, ' +
                +' COUNT(['[email protected]COLUMN_NAME+']) records '+
                +' FROM '[email protected]TABLE_CATALOG+'.'[email protected]TABLE_SCHEMA+'.'[email protected]TABLE_NAME +
                +' WHERE ' + CASE WHEN @SHOULD_CAST=1 THEN 'CAST(['[email protected]COLUMN_NAME + '] as NVARCHAR(max)) ' ELSE ' ['[email protected]COLUMN_NAME + '] ' END
                +' LIKE '''+ @SEARCH_VALUE_LIKE + ''' '
    
        -- PRINT @SQL;
    
        IF @i % 100 = 0
            BEGIN
                SET @progress_sum = (SELECT SUM(RECORDS) FROM ##RESULTS)
                PRINT CAST (@i as varchar(100)) +' of ' + CAST(@TOTAL as varchar(100)) +': '+ CAST (@progress_sum as varchar(100))
            END
    
        INSERT INTO ##RESULTS (TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, RECORDS)
        EXEC(@SQL)
    
        FETCH NEXT FROM col_cur INTO @TABLE_CATALOG, @TABLE_SCHEMA, @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE;
        SET @i[email protected]i+1
        -- IF @i > 1000
        --     BREAK
    END
    CLOSE col_cur;
    DEALLOCATE col_cur;
    
    SELECT * FROM ##RESULTS WHERE RECORDS>0;

    A continuación, a la vista de los resultados, incluso durante la ejecución, de una ventana a otra, ejecutar:

    DECLARE @SEARCH_VALUE_LIKE NVARCHAR(100)=N'%@[email protected]%'
    SELECT * FROM ##RESULTS WHERE RECORDS>0;
    
    SET NOCOUNT ON;
    DECLARE col_cur CURSOR FOR
    SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE
    FROM ##RESULTS WHERE RECORDS>0;
    
    DECLARE @TABLE_CATALOG nvarchar(500), @TABLE_SCHEMA nvarchar(500), @TABLE_NAME nvarchar(500), @COLUMN_NAME nvarchar(500), @DATA_TYPE nvarchar(500);
    DECLARE @SQL nvarchar(4000)='';
    
    OPEN col_cur;
    
    FETCH NEXT FROM col_cur INTO @TABLE_CATALOG, @TABLE_SCHEMA, @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE;
    DECLARE @i int =0
    DECLARE @SHOULD_CAST bit=0
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @SHOULD_CAST = (SELECT CASE @DATA_TYPE
                                    WHEN 'varchar' THEN 0
                                    WHEN 'nvarchar' THEN 0
                                    WHEN 'char' THEN 0
                                    ELSE 1 END)
    
        SET @SQL='SELECT '''[email protected]TABLE_CATALOG+''' catalog_name, '''[email protected]TABLE_SCHEMA+''' schema_name, '''[email protected]TABLE_NAME+''' table_name, '''[email protected]COLUMN_NAME+''' column_name, '''[email protected]DATA_TYPE+''' data_type, ' +
                +' ['[email protected]COLUMN_NAME+']'+
                +', * '
                +' FROM '[email protected]TABLE_CATALOG+'.'[email protected]TABLE_SCHEMA+'.'[email protected]TABLE_NAME +
                +' WHERE ' + CASE WHEN @SHOULD_CAST=1 THEN 'CAST(['[email protected]COLUMN_NAME + '] as NVARCHAR(max)) ' ELSE ' ['[email protected]COLUMN_NAME + '] ' END
                +' LIKE '''+ @SEARCH_VALUE_LIKE + ''' '
    
        PRINT @SQL;
    
        EXEC(@SQL)
    
        FETCH NEXT FROM col_cur INTO @TABLE_CATALOG, @TABLE_SCHEMA, @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE;
        SET @i[email protected]i+1
        -- IF @i > 10
        --    BREAK
    END
    CLOSE col_cur;
    DEALLOCATE col_cur;

    Par de menciones al respecto:

    • utiliza los cursores en lugar de un bloqueo de bucle while
    • puede progreso de impresión (descomentar si es necesario)
    • se puede salir después de un par de intentos (quite el comentario de la SI al final)
    • muestra todos los registros
    • usted puede ajustar según sea necesario

    RENUNCIAS:

    • NO se ejecutan en entornos de producción!
    • Es lento. Si la base de datos se accede por otros servicios/usuarios, por favor agregar «WITH (NOLOCK)» después de cada nombre de tabla en todos los selecciona, especialmente la dinámica seleccionados.
    • No valida/proteger contra todo tipo de inyección de código SQL opciones.
    • Si su base de datos es enorme, prepararse para algunos el sueño, asegurarse de que la consulta no va a ser asesinado después de un par de minutos.
    • Que arroja unos valores de cadena, incluyendo int/bigints/smallints/tinyints. Si usted no necesita los, ponerlos en la misma listas de exclusión, con la fecha y hora en la parte superior de la secuencia de comandos.
  10. 2

    Me dieron acceso a una base de datos, pero no de la mesa donde mi consulta se había almacenado en.

    Inspirado por @marc_s respuesta, tenía una mirada en HeidiSQL que es un programa de Windows que puede lidiar con MySQL, SQL Server y PostgreSQL.

    Me encontré con que también puede buscar en una base de datos para una cadena.

    ¿Cómo puedo buscar en una base de datos SQL Server para una cadena?

    ¿Cómo puedo buscar en una base de datos SQL Server para una cadena?

    Buscará en cada mesa y se dará cuenta de cuántas veces se encuentra la cadena por la tabla!

  11. 1

    El contenido de todos los procedimientos almacenados, vistas y funciones que se almacenan en el campo texto de la tabla sysComments. El nombre de todos los objetos se almacenan en la tabla sysObjects y las columnas están en sysColumns.

    Contar con esta información, usted puede utilizar este código para buscar en el contenido de las vistas, procedimientos almacenados y funciones de la palabra:

    Select b.name from syscomments a
    inner join sysobjects b on a.id = b.id
    where text like '%tblEmployes%'

    Esta consulta le dará los objetos que contiene la palabra «tblEmployes» .

    A la búsqueda por el nombre de los Objetos se puede utilizar este código:

    Select name from sysobjects
    where name like  '%tblEmployes%'

    Y, finalmente, para encontrar los objetos que tienen al menos una columna que contiene la palabra «tblEmployes», usted puede utilizar este código:

    Select b.name from syscolumns a inner join sysobjects b on a.id = b.id
    where a.name like  '%tblEmployes%'

    Puede combinar estas tres consultas con la unión:

    Select distinct b.name from syscomments a
    inner join sysobjects b on a.id = b.id
    where text like '%tblEmployes%'
    union
    Select distinct name from sysobjects
    where name like  '%tblEmployes%'
    union
    Select distinct b.name from syscolumns a inner join sysobjects b on a.id = b.id
    where a.name like  '%tblEmployes%'

    Con esta consulta tiene todos los objetos que contengan la palabra «tblEmployes» en su contenido, o nombre, o como una columna.

  12. 0

    Aquí es el mismo guión que enviado por el usuario de la l–«»»———«»»»»», pero corregidos para trabajar en un caso sensible a la instancia de SQL, y con algunas otras mejoras de menor importancia.

    DROP PROCEDURE IF EXISTS dbo.spFind_Text_In_Database
    GO
    
    CREATE PROCEDURE dbo.spFind_Text_In_Database
        @strText_To_Find NVARCHAR(4000),
        @bitExact_Match BIT = 0
    AS
    SET NOCOUNT ON
    
    DECLARE @Temp TABLE(RowId INT IDENTITY(1,1), SchemaName sysname, TableName sysname, ColumnName SysName, DataType VARCHAR(100), DataFound BIT)
    
        INSERT  INTO @Temp(TableName,SchemaName, ColumnName, DataType)
        SELECT  C.TABLE_NAME, C.TABLE_SCHEMA, C.COLUMN_NAME, C.DATA_TYPE
        FROM    INFORMATION_SCHEMA.COLUMNS AS C
                INNER Join INFORMATION_SCHEMA.TABLES AS T
                    ON C.TABLE_NAME = T.TABLE_NAME
            AND C.TABLE_SCHEMA = T.TABLE_SCHEMA
        WHERE   TABLE_TYPE = 'BASE TABLE'
                And DATA_TYPE In ('ntext','text','nvarchar','nchar','varchar','char')
    
    
    DECLARE @i INT
    DECLARE @MAX INT
    DECLARE @TableName sysname
    DECLARE @ColumnName sysname
    DECLARE @SchemaName sysname
    DECLARE @SQL NVARCHAR(4000)
    DECLARE @PARAMETERS NVARCHAR(4000)
    DECLARE @DataExists BIT
    DECLARE @SQLTemplate NVARCHAR(4000)
    
    SELECT  @SQLTemplate = CASE WHEN @bitExact_Match = 1
                                THEN 'If Exists(Select *
                                              From   ReplaceTableName
                                              Where  Convert(nVarChar(4000), [ReplaceColumnName])
                                                           = ''' + @strText_To_Find + '''
                                              )
                                         Set @DataExists = 1
                                     Else
                                         Set @DataExists = 0'
                                ELSE 'If Exists(Select *
                                              From   ReplaceTableName
                                              Where  Convert(nVarChar(4000), [ReplaceColumnName])
                                                           Like ''%' + @strText_To_Find + '%''
                                              )
                                         Set @DataExists = 1
                                     Else
                                         Set @DataExists = 0'
                                END,
            @PARAMETERS = '@DataExists Bit OUTPUT',
            @i = 1
    
    SELECT @i = 1, @MAX = MAX(RowId)
    FROM   @Temp
    
    WHILE @i <= @MAX
        BEGIN
            SELECT  @SQL = REPLACE(REPLACE(@SQLTemplate, 'ReplaceTableName', QUOTENAME(SchemaName) + '.' + QUOTENAME(TableName)), 'ReplaceColumnName', ColumnName)
            FROM    @Temp
            WHERE   RowId = @i
    
    
            PRINT @SQL
            EXEC sp_executesql @SQL, @PARAMETERS, @DataExists = @DataExists OUTPUT
    
            IF @DataExists =1
                UPDATE @Temp SET DataFound = 1 WHERE RowId = @i
    
            SET @i = @i + 1
        END
    
    SELECT  SchemaName,TableName, ColumnName
    FROM    @Temp
    WHERE   DataFound = 1
    GO
  13. 0

    Aquí es cómo usted puede buscar en la base de datos en Swift utilizando el FMDB biblioteca.

    Primero, vaya a este enlace y agregar esto a su proyecto: FMDB. Cuando usted haya hecho, entonces aquí es cómo hacerlo. Por ejemplo, tenemos una tabla llamada Persona, y tiene nombre y secondName y usted quiere encontrar los datos de su primer nombre, aquí es un código para que:

        func loadDataByfirstName(firstName : String, completion: @escaping CompletionHandler){
        if isDatabaseOpened {
            let query = "select * from Person where firstName like '\(firstName)'"
            do {
                let results = try database.executeQuery(query, values: [firstName])
                while results.next() {
                    let firstName = results.string(forColumn: "firstName") ?? ""
                    let lastName = results.string(forColumn: "lastName") ?? ""
                    let newPerson = Person(firstName: firstName, lastName: lastName)
                    self.persons.append(newPerson)
                }
                completion(true)
            }catch let err {
                completion(false)
                print(err.localizedDescription)
            }
            database.close()
        }
    }

    A continuación, en el ViewController que usted va a escribir esto para encontrar a la persona de los detalles que usted está buscando:

      override func viewWillAppear(_ animated: Bool) {
         super.viewWillAppear(animated)
          SQLManager.instance.openDatabase { (success) in
            if success {
                SQLManager.instance.loadDataByfirstName(firstName: "Hardi") { (success) in
                    if success {
                        // You have your data Here
                    }
                }
            }
        }
    }
  14. 0

    Si quiero encontrar donde todo lo que quiero buscar es, yo uso este:

    DECLARE @search_string    varchar(200)
        SET @search_string = '%myString%'
    
        SELECT DISTINCT
               o.name AS Object_Name,
               o.type_desc,
               m.definition
          FROM sys.sql_modules m
               INNER JOIN
               sys.objects o
                 ON m.object_id = o.object_id
         WHERE m.definition Like @search_string;

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea