pastebin - collaborative debugging

pastebin is a collaborative debugging tool allowing you to share and modify code snippets while chatting on IRC, IM or a message board.

This site is developed to XHTML and CSS2 W3C standards. If you see this paragraph, your browser does not support those standards and you need to upgrade. Visit WaSP for a variety of options.

SQL pastebin - collaborative debugging tool View Help


Posted by Bergius on Wed 14 May 14:00
report spam | download | new post

  1. --
  2. -- Finds data in NTEXT/TEXT/NVARCHAR/VARCHAR columns and lists table and column names
  3. -- Usage: find_tables_and_columns 'text to find'
  4. --    or: find_tables_and_columns @search_string = 'text to find', @keep_data = 1
  5. --
  6. CREATE PROCEDURE find_tables_and_columns
  7.         @search_string varchar(255) = NULL,
  8.         @keep_data bit = 0
  9. AS
  10.         SET NOCOUNT ON
  11.  
  12.         DECLARE @report_table varchar(255), @timestamp varchar(12)
  13.        
  14.         SET @timestamp = REPLACE(REPLACE(REPLACE(convert(varchar, getdate(), 20), ':', ''), '-', ''), ' ', '')
  15.         SET @report_table = 'find_tables_and_columns_' + @timestamp
  16.        
  17.         IF (@search_string IS NULL)
  18.                 SET @search_string = '<script'
  19.        
  20.         -- create report table
  21.         EXEC('IF NOT EXISTS(SELECT name FROM sysobjects WHERE name = ''' + @report_table + ''' AND xtype=''U'') CREATE TABLE [' + @report_table + '] (table_name varchar(255), column_name varchar(255))')
  22.        
  23.         -- truncate report table
  24.         EXEC('DELETE FROM [' + @report_table + ']')
  25.        
  26.         -- find all tables and columns of types ntext, text, nvarchar and varchar
  27.         DECLARE @T varchar(255),@C varchar(255)
  28.         DECLARE Table_Cursor CURSOR FOR
  29.                 SELECT a.name, b.name
  30.                 FROM sysobjects a, syscolumns b
  31.                 WHERE a.id = b.id
  32.                         AND a.xtype = 'u'
  33.                         AND (b.xtype = 99 OR b.xtype = 35 OR b.xtype = 231 OR b.xtype = 167)
  34.         OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T, @C
  35.  
  36.         -- loop through all tables and columns and see where data matches search string
  37.         WHILE (@@FETCH_STATUS = 0) BEGIN
  38.                 IF (@T != @report_table) -- ignore report table
  39.                         EXEC('IF (EXISTS(SELECT [' + @C + '] FROM [' + @T + '] WHERE [' + @C + '] LIKE ''%' + @search_string + '%'')) INSERT INTO [' + @report_table + '] (table_name, column_name) VALUES (''' + @T + ''', ''' + @C + ''')')
  40.                 FETCH NEXT FROM Table_Cursor INTO @T, @C
  41.         END
  42.  
  43.         CLOSE Table_Cursor
  44.         DEALLOCATE Table_Cursor
  45.        
  46.         SET NOCOUNT OFF
  47.  
  48.         -- output report
  49.         EXEC('SELECT table_name, column_name FROM [' + @report_table + ']')
  50.  
  51.         SET NOCOUNT ON
  52.        
  53.         -- drop data or select table name
  54.         IF (@keep_data = 0) BEGIN
  55.                 EXEC('DROP TABLE [' + @report_table + ']')
  56.         END
  57.         ELSE BEGIN
  58.                 SELECT @report_table AS report_table
  59.         END
  60. GO
  61.  
  62. --
  63. -- Finds data in NTEXT/TEXT/NVARCHAR/VARCHAR columns and outputs matching rows
  64. -- Usage: find_rows 'text to find'
  65. --
  66. CREATE PROCEDURE find_rows
  67.         @search_string varchar(255) = NULL
  68. AS
  69.         SET NOCOUNT ON
  70.  
  71.         IF (@search_string IS NULL)
  72.                 SET @search_string = '<script'
  73.        
  74.         -- find all tables and columns of types ntext, text, nvarchar and varchar
  75.         DECLARE @T varchar(255),@C varchar(255)
  76.         DECLARE Table_Cursor CURSOR FOR
  77.                 SELECT a.name, b.name
  78.                 FROM sysobjects a, syscolumns b
  79.                 WHERE a.id = b.id
  80.                         AND a.xtype = 'u'
  81.                         AND (b.xtype = 99 OR b.xtype = 35 OR b.xtype = 231 OR b.xtype = 167)
  82.         OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T, @C
  83.  
  84.         SET NOCOUNT OFF
  85.  
  86.         -- loop through all tables and columns and see where data matches search string
  87.         WHILE (@@FETCH_STATUS = 0) BEGIN
  88.                 EXEC('IF (EXISTS(SELECT [' + @C + '] FROM [' + @T + '] WHERE [' + @C + '] LIKE ''%' + @search_string + '%'')) SELECT ''' + @T + ''' AS tablename, ''' + @C + ''' AS columnname, * FROM [' + @T + '] WHERE [' + @C + '] LIKE ''%' + @search_string + '%''')
  89.                 FETCH NEXT FROM Table_Cursor INTO @T, @C
  90.         END
  91.  
  92.         CLOSE Table_Cursor
  93.         DEALLOCATE Table_Cursor
  94. GO

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with @@


Remember me