Just nu i M3-nätverket
Jump to content

Söka igenom hela databasen


Admini

Recommended Posts

Hej

Är det möjligt att söka igenom alla tabeller i en databas utan att ange varenda tabellnamn i sql-satsen?

Hur?

 

Tack

 

Link to comment
Share on other sites

Micke_skane

Det har iallafall inte jag sett någon gång men en tanke som slog mig var att om man vet tabellnamnen så kan man ju lägga in dem i en Array och sen köra en For-loop där man söker igen varje tabell för sig.

 

Frågan är bara hur man ska ta hand om svaren man kan få...Hmmm

 

Har alltså ingen aning om det är en möjlig variant eller inte...

Testa och berätta om det gick :)

Men det är kanske inte någon skillnad mot att skriva in varje tabell för sig, såg jag Nu och det ville du ju inte...

Går nog och lägger mig nu!

 

[inlägget ändrat 2006-05-29 22:40:51 av Micke_skane]

Link to comment
Share on other sites

Nej, precis som du måste ange vilka fält du letar i måste du naturligtvis berätta var databasmotorn ska leta. Om det inte är praktiskt har du nog satsat på fel teknik när du valde att lägga informationen i en databas, alternativt strukturerat den helt fel.

 

Link to comment
Share on other sites

DanielForPresident

Letar du efter något väldigt generellt eller till någon viss typ av databas?

 

Jag har lite sådana script för SQL server(vet inte hur bra de fungerar för andra databaser då jag inte testat) men det kanske inte är vad du är ute efter.

 

Link to comment
Share on other sites

Det är till mySQL men syntaxen borde vara desamma, eller?

Jag vill söka på alla kolumn av typen text efter en viss sträng.

 

Link to comment
Share on other sites

DanielForPresident

Inte helt säker på att det fungerar på samma sätt.

 

I SQL server kan du ex. hämta alla tabeller såhär:

 

SELECT * FROM INFORMATION_SCHEMA.TABLES

 

Kolumnnamnen hittar du genom:

 

SELECT * FROM INFORMATION_SCHEMA.COLUMNS

 

Genom att kombinera dem med en CURSOR kan man söka igenom alla kloumner i alla tabeller efter en söksträng.

 

Går det att göra i MySQL?

 

Link to comment
Share on other sites

Går det att göra i MySQL?

ingen aning, men ska prova det under dagen. Jag låter dig veta.

 

Link to comment
Share on other sites

DanielForPresident

Det visste jag inte :)

 

Följande script använder jag för att söka igenom alla tabeller i SQL server. Ni kan ju testa och se om det fungerar i MySQL server också (har tyvärr inte tillgång till någon bra MySQL databas att testa på här just nu)

 

[log]

DECLARE @SearchStr nvarchar(100)

SET @SearchStr = 'Network'

-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
-- Purpose: To search all columns of all tables for a given search string
-- Written by: Narayana Vyas Kondreddi
-- Site: http://vyaskn.tripod.com
-- Tested on: SQL Server 7.0 and SQL Server 2000
-- Date modified: 28th July 2002 22:50 GMT


CREATE TABLE #Results (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'
ANDQUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
ANDOBJECTPROPERTY(
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)
ANDTABLE_NAME= PARSENAME(@TableName, 1)
ANDDATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
ANDQUOTENAME(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
DROP TABLE #Results 

[/log]

 

Link to comment
Share on other sites

 DECLARE SearchStr nvarchar(100) SET SearchStr = 'Networ... 

 

Det går inte att öppna koden när jag klickar på "pluset"

 

Link to comment
Share on other sites

DanielForPresident

Märkligt, fungerar fint här.

 

Här kommer scriptet en gång till (utan "plus"):

 

DECLARE @SearchStr nvarchar(100)

SET @SearchStr = 'Network'

-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
-- Purpose: To search all columns of all tables for a given search string
-- Written by: Narayana Vyas Kondreddi
-- Site: http://vyaskn.tripod.com
-- Tested on: SQL Server 7.0 and SQL Server 2000
-- Date modified: 28th July 2002 22:50 GMT


CREATE TABLE #Results (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'
ANDQUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
ANDOBJECTPROPERTY(
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)
ANDTABLE_NAME= PARSENAME(@TableName, 1)
ANDDATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
ANDQUOTENAME(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
DROP TABLE #Results

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...