sp_FindColumn.txt 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. CREATE PROCEDURE sp_FindColumn
  2. @Column1 VARCHAR(200)='',
  3. @Column2 VARCHAR(200)=''
  4. AS
  5. BEGIN
  6. SET NOCOUNT ON;
  7. DECLARE @Loop INT
  8. DECLARE @Count INT
  9. DECLARE @Database VARCHAR(200)
  10. DECLARE @SQL NVARCHAR(4000)
  11. CREATE TABLE #Output
  12. (
  13. [DatabaseID] INT,
  14. [Item] VARCHAR(200),
  15. [Type] VARCHAR(50)
  16. )
  17. DECLARE @Databases TABLE
  18. (
  19. [DatabaseID] INT IDENTITY(1,1),
  20. [Database] VARCHAR(200)
  21. )
  22. IF LEN(ISNULL(@Column1,'')) = 0
  23. BEGIN
  24. DECLARE @Info TABLE
  25. (
  26. Info VARCHAR(100)
  27. )
  28. INSERT INTO @Info (Info) VALUES ('sp_FindColumn {Item1},{Item2}')
  29. INSERT INTO @Info (Info) VALUES ('Searches all databases for a column name');
  30. INSERT INTO @Info (Info) VALUES (' containing {Item} and {Item2} ')
  31. INSERT INTO @Info (Info) VALUES ('{Item2} is optional.')
  32. INSERT INTO @Info (Info) VALUES ('Both tables and views are searched.')
  33. INSERT INTO @Info (Info) VALUES ('')
  34. INSERT INTO @Info (Info) VALUES ('Check out other cool tools like')
  35. INSERT INTO @Info (Info) VALUES ('sp_ColumnsInATable')
  36. INSERT INTO @Info (Info) VALUES ('sp_CreateUserDefinedType')
  37. INSERT INTO @Info (Info) VALUES ('sp_DropColumn')
  38. INSERT INTO @Info (Info) VALUES ('sp_Find')
  39. INSERT INTO @Info (Info) VALUES ('sp_FindInProc')
  40. INSERT INTO @Info (Info) VALUES ('sp_FindInAllProcs')
  41. INSERT INTO @Info (Info) VALUES ('sp_List')
  42. INSERT INTO @Info (Info) VALUES ('sp_varinsp')
  43. SELECT Info from @Info
  44. RETURN
  45. END
  46. INSERT INTO @Databases ([Database])
  47. SELECT name from sysdatabases where name not in ('master','tempdb','model','msdb')
  48. SET @Count = @@ROWCOUNT
  49. SET @Loop = 1
  50. WHILE @Loop <= @Count
  51. BEGIN
  52. SELECT @Database = [Database]
  53. FROM @Databases
  54. WHERE DatabaseID = @Loop
  55. IF LEN(@Column2)=0
  56. BEGIN
  57. SET @SQL = N'INSERT INTO #Output([DatabaseID],Item,[Type]) SELECT ' + CONVERT(VARCHAR,@Loop) + ',so.name+''.''+sc.name,case when so.xtype=''U'' then ''Table'' ELSE ''View'' END from ' + @Database + '..sysobjects as so inner join ' + @Database + '..syscolumns as sc on so.id = sc.id WHERE so.xtype IN (''U'',''V'') AND sc.NAME LIKE ''%' + @Column1 + '%'''
  58. END ELSE
  59. BEGIN
  60. SET @SQL = N'INSERT INTO #Output([DatabaseID],Item,[Type]) SELECT ' + CONVERT(VARCHAR,@Loop) + ',so.name+''.''+sc.name,case when so.xtype=''U'' then ''Table'' ELSE ''View'' END from ' + @Database + '..sysobjects as so inner join ' + @Database + '..syscolumns as sc on so.id = sc.id WHERE so.xtype IN (''U'',''V'') AND sc.NAME LIKE ''%' + @Column1 + '%'' and sc.NAME LIKE ''%' + @Column2 + '%'''
  61. END
  62. EXEC sp_sqlexec @SQL
  63. SET @Loop = @Loop + 1
  64. END
  65. SELECT D.[Database],O.[Type],O.Item
  66. FROM #Output AS O
  67. INNER JOIN @Databases AS D
  68. ON O.DatabaseID = D.DatabaseID
  69. ORDER BY D.[Database],O.[Type],O.Item
  70. DROP TABLE #Output
  71. END
  72. GO