Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2000 Forums
 Transact-SQL (2000)
 Wordsearching a table

Author  Topic 

Jaybee from his castle
Yak Posting Veteran

64 Posts

Posted - 2006-12-08 : 08:01:10
Hi, I'd like to search an entire table for a term, rather like,

SELECT *
FROM [dbo].[tablename]
where columname like '%blade%'

Except the term could exist in ANY column of the table...

Cheers,

JB

pootle_flump

1064 Posts

Posted - 2006-12-08 : 08:05:53
I use a solution blindman posted. You can (in fact I did it today ) filter the code to look at specific table(s) only.
http://www.dbforums.com/showthread.php?t=1215464

HTH
Go to Top of Page

madhivanan
Premature Yak Congratulator

22864 Posts

Posted - 2006-12-08 : 08:58:48
or

http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm


Madhivanan

Failing to plan is Planning to fail
Go to Top of Page

Jaybee from his castle
Yak Posting Veteran

64 Posts

Posted - 2006-12-11 : 04:15:08
Cheers guys!!
Go to Top of Page

spirit1
Cybernetic Yak Master

11752 Posts

Posted - 2006-12-11 : 04:35:36
i use a bit modifieds brett's solution foud here:
http://weblogs.sqlteam.com/brettk/archive/2005/02/08/4144.aspx

this is the modified sproc that takes a dbname as a parameter:

CREATE PROC [dbo].[SearchDb]
@DbName sysname,
@SearchArg varchar(2000)
AS
BEGIN
SET NOCOUNT ON
CREATE TABLE ##SearchResults(
SPID int
, SearchDate datetime
, TABLE_CATALOG sysname
, TABLE_SCHEMA sysname
, TABLE_NAME sysname
, COLUMN_NAME varchar(255)
, DATA_TYPE varchar(25)
, SEARCHARG varchar(2000)
, RESULTS varchar(4000))

DECLARE @sql varchar(8000), @Date datetime
DECLARE @TABLE_CATALOG sysname, @TABLE_SCHEMA sysname, @TABLE_NAME sysname,
@COLUMN_NAME sysname, @DATA_TYPE varchar(25)

select @Date = getdate()

exec('DECLARE SearchCursor CURSOR FOR
SELECT c.TABLE_CATALOG, c.TABLE_SCHEMA, c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE
FROM ' + @DbName + '.INFORMATION_SCHEMA.Columns c
JOIN ' + @DbName + '.INFORMATION_SCHEMA.Tables t ON c.TABLE_CATALOG = t.TABLE_CATALOG
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c. TABLE_NAME = t.TABLE_NAME
WHERE c.DATA_TYPE IN (''char'', ''nchar'', ''varchar'', ''nvarchar'', ''text'', ''ntext'' ,
''datetime'', ''uniqueidentifier'')
and t.TABLE_TYPE = ''BASE TABLE''')

OPEN SearchCursor
FETCH NEXT FROM SearchCursor INTO @TABLE_CATALOG, @TABLE_SCHEMA, @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE

WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sql = 'SET NOCOUNT ON ' + CHAR(13)
+ ' INSERT INTO ##SearchResults(SPID,SearchDate,TABLE_CATALOG,TABLE_SCHEMA, ' +
+ 'TABLE_NAME,COLUMN_NAME,DATA_TYPE,SEARCHARG,RESULTS) '
+ 'SELECT ' + CONVERT(varchar(15),@@SPID) + ',' + ''''
+ CONVERT(varchar(25),@Date,120) + '''' + ',' + '''' +
+ @TABLE_CATALOG + ''',''' + @TABLE_SCHEMA + ''',''' + @TABLE_NAME + ''',' + ''''
+ @COLUMN_NAME + ''',' + '''' + @DATA_TYPE + ''',' + ''''+ @SearchArg + '''' + ','
+ 'CONVERT(varchar(4000),' + '[' + @COLUMN_NAME + ']' + CASE WHEN @DATA_TYPE = 'datetime' THEN ', 121' else '' end + ')'
+ ' FROM ' + '['+ @TABLE_CATALOG + '].[' + @TABLE_SCHEMA + '].[' + @TABLE_NAME + '] '
+ ' WHERE PATINDEX( ' + '''' + '%' + @SearchArg + '%' + '''' + ','
+ CASE WHEN @DATA_TYPE = 'datetime' or @DATA_TYPE = 'uniqueidentifier' THEN 'CONVERT(varchar(100),' + '[' + @COLUMN_NAME + ']'
+ ', 121)' ELSE '[' + @COLUMN_NAME + ']' END
+ ') <> 0'

--SELECT @sql
EXEC(@sql)
FETCH NEXT FROM SearchCursor INTO @TABLE_CATALOG, @TABLE_SCHEMA, @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE
END
SET NOCOUNT OFF

SELECT distinct SEARCHARG, TABLE_NAME, COLUMN_NAME, DATA_TYPE, RESULTS , TABLE_CATALOG,
SearchDate, SPID, TABLE_SCHEMA
FROM ##SearchResults
WHERE SPID = @@SPID and COLUMN_NAME is not null
ORDER BY TABLE_NAME, COLUMN_NAME

CLOSE SearchCursor
DEALLOCATE SearchCursor

DROP TABLE ##SearchResults
END




Go with the flow & have fun! Else fight the flow
blog thingie: http://weblogs.sqlteam.com/mladenp
Go to Top of Page
   

- Advertisement -