Skip to content

Commit 7e17644

Browse files
authored
Updated query 📦
1 parent 4688c1f commit 7e17644

1 file changed

Lines changed: 40 additions & 55 deletions

File tree

SQL Queries/SearchAllTables.sql

Lines changed: 40 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -9,71 +9,56 @@ GO
99
--Here is the complete stored procedure code:
1010

1111

12-
CREATE PROC [dbo].[SearchAllTables]
12+
IF OBJECT_ID('[dbo].[SearchAllTables]', 'P') IS NOT NULL
13+
DROP PROCEDURE [dbo].[SearchAllTables]
14+
GO
15+
16+
-- Create a stored procedure called [dbo].[SearchAllTables]
17+
CREATE PROCEDURE [dbo].[SearchAllTables]
1318
(
14-
@SearchStr nvarchar(100)
19+
@SearchStr NVARCHAR(100) -- Input parameter to search for a specific string
1520
)
1621
AS
1722
BEGIN
23+
SET NOCOUNT ON;
24+
25+
-- Create a temporary table to store the search results
26+
CREATE TABLE #Results (TableName NVARCHAR(256), ColumnName NVARCHAR(128), ColumnValue NVARCHAR(MAX), RowNumber INT);
1827

19-
-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
20-
-- Purpose: To search all columns of all tables for a given search string
21-
-- Written by: Narayana Vyas Kondreddi
22-
-- Site: http://vyaskn.tripod.com
23-
-- Tested on: SQL Server 7.0 and SQL Server 2000
24-
-- Date modified: 28th July 2002 22:50 GMT
28+
-- Declare variables to store table and column names, and construct the search string
29+
DECLARE @TableName NVARCHAR(256), @ColumnName NVARCHAR(128), @SearchStr2 NVARCHAR(110);
30+
SET @SearchStr2 = '%' + @SearchStr + '%'; -- Add wildcard characters to search string
2531

32+
-- Declare a dynamic SQL variable to build the dynamic SQL statement
33+
DECLARE @DynamicSQL NVARCHAR(MAX) = N'';
2634

27-
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))
35+
-- Build the dynamic SQL statement to search for the specified string in all tables and columns
36+
SELECT @DynamicSQL +=
37+
N'INSERT INTO #Results (TableName, ColumnName, ColumnValue, RowNumber) ' +
38+
N'SELECT ''' + QUOTENAME(t.TABLE_SCHEMA) + '.' + QUOTENAME(t.TABLE_NAME) + ''', ' +
39+
N'''' + QUOTENAME(c.COLUMN_NAME) + ''', ' +
40+
N'CAST(' + QUOTENAME(c.COLUMN_NAME) + ' AS NVARCHAR(MAX)), ' +
41+
N'ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) ' +
42+
N'FROM ' + QUOTENAME(t.TABLE_SCHEMA) + '.' + QUOTENAME(t.TABLE_NAME) + ' (NOLOCK) ' +
43+
N'WHERE ' + QUOTENAME(c.COLUMN_NAME) + ' LIKE @SearchStr2; '
44+
FROM INFORMATION_SCHEMA.TABLES t
45+
INNER JOIN INFORMATION_SCHEMA.COLUMNS c ON t.TABLE_NAME = c.TABLE_NAME AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
46+
WHERE t.TABLE_TYPE = 'BASE TABLE'
47+
AND c.DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'uniqueidentifier')
48+
AND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(t.TABLE_SCHEMA) + '.' + QUOTENAME(t.TABLE_NAME)), 'IsMSShipped') = 0;
2849

29-
SET NOCOUNT ON
50+
-- Get the total number of tables
51+
DECLARE @TotalTables INT = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE');
3052

31-
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
32-
SET @TableName = ''
33-
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
53+
-- Initialize the counter variables
54+
DECLARE @Counter INT = 0, @Progress INT = 0;
3455

35-
WHILE @TableName IS NOT NULL
36-
BEGIN
37-
SET @ColumnName = ''
38-
SET @TableName =
39-
(
40-
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
41-
FROM INFORMATION_SCHEMA.TABLES
42-
WHERE TABLE_TYPE = 'BASE TABLE'
43-
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
44-
AND OBJECTPROPERTY(
45-
OBJECT_ID(
46-
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
47-
), 'IsMSShipped'
48-
) = 0
49-
)
56+
-- Execute the dynamic SQL statement using sp_executesql with the search string parameter
57+
EXEC sp_executesql @DynamicSQL, N'@SearchStr2 NVARCHAR(110)', @SearchStr2 = @SearchStr2;
5058

51-
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
52-
BEGIN
53-
SET @ColumnName =
54-
(
55-
SELECT MIN(QUOTENAME(COLUMN_NAME))
56-
FROM INFORMATION_SCHEMA.COLUMNS
57-
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
58-
AND TABLE_NAME = PARSENAME(@TableName, 1)
59-
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'uniqueidentifier')
60-
AND QUOTENAME(COLUMN_NAME) > @ColumnName
61-
)
62-
63-
IF @ColumnName IS NOT NULL
64-
BEGIN
65-
INSERT INTO #Results
66-
EXEC
67-
(
68-
'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)
69-
FROM ' + @TableName + ' (NOLOCK) ' +
70-
' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
71-
72-
)
73-
--Print @TableName
74-
END
75-
END
76-
END
59+
-- Select the search results from the temporary table
60+
SELECT TableName, ColumnName, ColumnValue, RowNumber FROM #Results;
7761

78-
SELECT ColumnName, ColumnValue FROM #Results
62+
-- Drop the temporary table
63+
DROP TABLE #Results;
7964
END

0 commit comments

Comments
 (0)