Here is the stored procedure that will search and display the table name and column name of the text you are passing as a parameter to search from the Database.
SQL Query
Execute the Procedure using the below query and pass the text to be searched in it.
and you will get the result as below
- CREATE PROC SearchTextFromDatabaseTables
- (
- @SearchString nvarchar(100)
- )
- AS
- BEGIN
- 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('%' + @SearchString + '%','''')
- 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'
- AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
- AND OBJECTPROPERTY(
- 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)
- AND TABLE_NAME = PARSENAME(@TableName, 1)
- AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal')
- 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
- END
Execute the Procedure using the below query and pass the text to be searched in it.
- exec SearchTextFromDatabaseTables 'TEXT TO BE SEARCHED'
and you will get the result as below
- ColumnName ColumnValue
- 1 [dbo].[TABLENAME].[COLUMNNAME] SEARCHED TEXT STRING
No comments:
Post a Comment