code_junkie

Trim all database fields

Nov 14th, 2011
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.55 KB | None | 0 0
  1. SELECT SQL
  2. FROM ( SELECT t.TABLE_CATALOG
  3. , t.TABLE_SCHEMA
  4. , t.TABLE_NAME
  5. , 0 SORT
  6. , 'UPDATE ' + QUOTENAME(t.TABLE_CATALOG) + '.' + QUOTENAME(t.TABLE_SCHEMA) + '.' + QUOTENAME(t.TABLE_NAME) SQL
  7. FROM INFORMATION_SCHEMA.TABLES t
  8. JOIN INFORMATION_SCHEMA.COLUMNS c
  9. ON t.TABLE_CATALOG = c.TABLE_CATALOG
  10. AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
  11. AND t.TABLE_NAME = c.TABLE_NAME
  12. WHERE t.TABLE_TYPE = 'BASE TABLE'
  13. AND c.DATA_TYPE IN ('char','nchar','varchar','nvarchar')
  14. GROUP BY t.TABLE_CATALOG
  15. , t.TABLE_SCHEMA
  16. , t.TABLE_NAME
  17. UNION ALL
  18. SELECT x.TABLE_CATALOG
  19. , x.TABLE_SCHEMA
  20. , x.TABLE_NAME
  21. , CASE WHEN x.COLUMN_NAME_MIN = y.COLUMN_NAME
  22. THEN 1
  23. ELSE 2
  24. END SORT
  25. , CASE WHEN x.COLUMN_NAME_MIN = y.COLUMN_NAME
  26. THEN 'SET '
  27. ELSE ' , '
  28. END + y.SQL SQL
  29. FROM ( SELECT t.TABLE_CATALOG
  30. , t.TABLE_SCHEMA
  31. , t.TABLE_NAME
  32. , MIN(c.COLUMN_NAME) COLUMN_NAME_MIN
  33. FROM INFORMATION_SCHEMA.TABLES t
  34. JOIN INFORMATION_SCHEMA.COLUMNS c
  35. ON t.TABLE_CATALOG = c.TABLE_CATALOG
  36. AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
  37. AND t.TABLE_NAME = c.TABLE_NAME
  38. WHERE t.TABLE_TYPE = 'BASE TABLE'
  39. AND c.DATA_TYPE IN ('char','nchar','varchar','nvarchar')
  40. GROUP BY t.TABLE_CATALOG
  41. , t.TABLE_SCHEMA
  42. , t.TABLE_NAME
  43. ) x
  44. JOIN ( SELECT t.TABLE_CATALOG
  45. , t.TABLE_SCHEMA
  46. , t.TABLE_NAME
  47. , c.COLUMN_NAME
  48. , QUOTENAME(c.COLUMN_NAME) + ' = LTRIM(RTRIM(' + QUOTENAME(c.COLUMN_NAME) + '))' SQL
  49. FROM INFORMATION_SCHEMA.TABLES t
  50. JOIN INFORMATION_SCHEMA.COLUMNS c
  51. ON t.TABLE_CATALOG = c.TABLE_CATALOG
  52. AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
  53. AND t.TABLE_NAME = c.TABLE_NAME
  54. WHERE t.TABLE_TYPE = 'BASE TABLE'
  55. AND c.DATA_TYPE IN ('char','nchar','varchar','nvarchar')
  56. ) y
  57. ON x.TABLE_CATALOG = y.TABLE_CATALOG
  58. AND x.TABLE_SCHEMA = y.TABLE_SCHEMA
  59. AND x.TABLE_NAME = y.TABLE_NAME
  60. ) x
  61. ORDER BY x.TABLE_CATALOG
  62. , x.TABLE_SCHEMA
  63. , x.TABLE_NAME
  64. , x.SORT
  65. , x.SQL
  66.  
  67. UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn))
  68.  
  69. DECLARE @CRLF AS varchar(2)
  70. SET @CRLF = CHAR(13) + CHAR(10)
  71. DECLARE @TAB AS varchar(1)
  72. SET @TAB = CHAR(9)
  73.  
  74. DECLARE @template AS varchar(max)
  75. SET @template = 'UPDATE {@OBJECT_NAME}' + @CRLF + 'SET {@column_list}'
  76.  
  77. DECLARE c CURSOR FAST_FORWARD
  78. FOR SELECT DISTINCT
  79. QUOTENAME(T.TABLE_CATALOG) + '.' + QUOTENAME(T.TABLE_SCHEMA)
  80. + '.' + QUOTENAME(T.TABLE_NAME) AS [OBJECT_NAME]
  81. FROM INFORMATION_SCHEMA.TABLES AS T
  82. INNER JOIN INFORMATION_SCHEMA.COLUMNS AS C
  83. ON T.TABLE_CATALOG = C.TABLE_CATALOG
  84. AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
  85. AND T.TABLE_NAME = C.TABLE_NAME
  86. AND T.TABLE_TYPE = 'BASE TABLE'
  87. AND C.DATA_TYPE IN ('varchar', 'nvarchar')
  88. ORDER BY 1
  89.  
  90. DECLARE @OBJECT_NAME AS sysname
  91.  
  92. OPEN c
  93.  
  94. FETCH NEXT FROM c INTO @OBJECT_NAME
  95. WHILE @@FETCH_STATUS = 0
  96. BEGIN
  97. DECLARE @column_list AS varchar(max)
  98. SELECT @column_list = COALESCE(@column_list + @CRLF + @TAB + ',', '')
  99. + QUOTENAME(C.COLUMN_NAME) + ' = LTRIM(RTRIM('
  100. + QUOTENAME(C.COLUMN_NAME) + '))'
  101. FROM INFORMATION_SCHEMA.COLUMNS AS C
  102. WHERE C.DATA_TYPE IN ('varchar', 'nvarchar')
  103. AND QUOTENAME(C.TABLE_CATALOG) + '.'
  104. + QUOTENAME(C.TABLE_SCHEMA) + '.' + QUOTENAME(C.TABLE_NAME) = @OBJECT_NAME
  105. ORDER BY C.ORDINAL_POSITION
  106.  
  107. PRINT REPLACE(REPLACE(@template, '{@column_list}', @column_list),
  108. '{@OBJECT_NAME}', @OBJECT_NAME)
  109.  
  110. FETCH NEXT FROM c INTO @OBJECT_NAME
  111. END
  112.  
  113. CLOSE c
  114.  
  115. DEALLOCATE c
  116.  
  117. ...
  118. PRINT REPLACE(REPLACE(@template, '{@column_list}', @column_list),
  119. '{@OBJECT_NAME}', @OBJECT_NAME)
  120. PRINT 'GO'
  121. SELECT @column_list = null
  122. FETCH NEXT FROM c INTO @OBJECT_NAME
  123. ...
  124.  
  125. SELECT @Cr = CHAR(13) + CHAR(10)
  126. SET NOCOUNT ON
  127.  
  128. -- Create table to store commands
  129. CREATE TABLE #tOutput(OutputText nvarchar(500), RowID int identity(1,1))
  130.  
  131. -- Build up commands
  132. INSERT #tOutput(OutputText)
  133. SELECT 'UPDATE ' + @TableName + ' SET '
  134.  
  135. INSERT #tOutput(OutputText)
  136. SELECT '[' + Column_Name + '] = ' + 'LTRIM(RTRIM([' + Column_Name + '])), '
  137. FROM INFORMATION_SCHEMA.Columns
  138. WHERE Table_Name = @TableName
  139. AND Data_Type LIKE '%CHAR%'
  140.  
  141. -- Trim last comma
  142. UPDATE #tOutput
  143. SET OutputText = LEFT(OutputText, LEN(OutputText)-1)
  144. WHERE RowID = (SELECT Max(RowID) FROM #tOutput)
  145.  
  146. -- use subselect to concatenate the command string
  147. SELECT @OutputString = ISNULL(@OutputString, '') + ISNULL(OutputText, '')
  148. FROM
  149. (SELECT OutputText
  150. FROM #tOutput
  151. ) TextOutput
  152. -- run the command
  153. EXEC sp_ExecuteSQL @OutputString
Add Comment
Please, Sign In to add comment