Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

SQL - Ricerca stringa in tutte le colonne di una tabella

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: archimede, Triumph Of Steel

SQL - Ricerca stringa in tutte le colonne di una tabella

Postdi Dylan666 » 29/04/19 11:21

Ciao a tutti, avrei bisogno di cercare una particolare stringa TUTTE le colonne di UNA particolare tabella.
Avevo da parte una Stored Procedure simile alla mia esigenza, che però cerca in TUTTE le tabelle ed era questa:
https://blog.sqlauthority.com/2017/07/1 ... procedure/

Ho provato a "adattarla" eliminando il primo ciclo e aggiungendo il parametro per il nome della tabella ma devo aver toppato qualcosa

Codice: Seleziona tutto
/*USAGE:
EXEC SearchAllColumns @TableName = 'NomeTabella', @SearchStr = 'Mia Stringa'
GO
*/

CREATE PROC SearchAllColumns
(
   @TableName nvarchar(100),
   @SearchStr nvarchar(100)
   
)
AS
BEGIN

   -- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
   -- Purpose: To search all columns of a table for a given search string
   -- Originally written by: Narayana Vyas Kondreddi
   -- Site: http://vyaskn.tripod.com

   CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

   SET NOCOUNT ON

   DECLARE @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
   SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''') -- MODIFICA QUI PER CAMBIARE LE CONDIZIONI DEL LIKE

      WHILE (@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')  -- MODIFICA QUI PER CAMBIARE I TIPI DI COLONNA DA CONTROLLARE
               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


Sarà sicuramente una scemenza ma potete aiutarmi a trovare l'errore?

Grazie
Avatar utente
Dylan666
Moderatore
 
Post: 38066
Iscritto il: 18/11/03 16:46

Sponsor
 

Postdi Dylan666 » 29/04/19 14:03

Sono arrivato a questo risultato, pare funzionare ma non sono in grado di capire se ci sono grossi errori o pezzi inutili... me lo ricontrollate?

Codice: Seleziona tutto
/*USAGE:
EXEC SearchAllColumns @TableName = 'NomeTabella', @SearchStr = 'Mia Stringa'
GO
*/

CREATE PROC SearchAllColumns
(
   @TableName nvarchar(100),
   @SearchStr nvarchar(100)
   
)
AS
BEGIN

   -- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
   -- Purpose: To search all columns of a table for a given search string
   -- Originally written by: Narayana Vyas Kondreddi
   -- Site: http://vyaskn.tripod.com

   CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

   SET NOCOUNT ON

   DECLARE @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
   SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''') -- MODIFICA QUI PER CAMBIARE LE CONDIZIONI DEL LIKE

       SET @ColumnName = ''
      WHILE (@ColumnName IS NOT NULL)
      BEGIN
         SET @ColumnName =
         (
            SELECT MIN(COLUMN_NAME)
            FROM    INFORMATION_SCHEMA.COLUMNS
            WHERE    TABLE_NAME   = @TableName
            AND   DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')  -- MODIFICA QUI PER CAMBIARE I TIPI DI COLONNA DA CONTROLLARE
            AND   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


Grazie anticipatamente
Avatar utente
Dylan666
Moderatore
 
Post: 38066
Iscritto il: 18/11/03 16:46

Postdi archimede » 29/04/19 16:14

Non sono un esperto di quel db (suppongo SQL Server), ma mi pare ok.

Alessandro
archimede
Moderatore
 
Post: 2834
Iscritto il: 07/11/02 12:41
Località: Genova


Torna a Programmazione


Topic correlati a "SQL - Ricerca stringa in tutte le colonne di una tabella":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti