Trim all database fields

后端 未结 9 1974
孤城傲影
孤城傲影 2020-12-29 15:05

Do you know if there\'s a quick way in sql server (via transact-sql) that I could trim all the database string fields.

9条回答
  •  生来不讨喜
    2020-12-29 15:23

    No cursors. Copy and paste the output. Works also for SQL 2000, which doesn't have varchar(max). This can be easily extended to add a GO line to the end of each UPDATE if desired.

    SELECT  SQL
    FROM    (       SELECT  t.TABLE_CATALOG
                     ,      t.TABLE_SCHEMA
                     ,      t.TABLE_NAME
                     ,      0               SORT
                     ,      'UPDATE  ' + QUOTENAME(t.TABLE_CATALOG) + '.' + QUOTENAME(t.TABLE_SCHEMA) + '.' + QUOTENAME(t.TABLE_NAME)       SQL
                    FROM    INFORMATION_SCHEMA.TABLES       t
                     JOIN   INFORMATION_SCHEMA.COLUMNS      c
                      ON    t.TABLE_CATALOG = c.TABLE_CATALOG
                       AND  t.TABLE_SCHEMA  = c.TABLE_SCHEMA
                       AND  t.TABLE_NAME    = c.TABLE_NAME
                    WHERE   t.TABLE_TYPE    = 'BASE TABLE'
                     AND    c.DATA_TYPE     IN ('char','nchar','varchar','nvarchar')
                    GROUP BY        t.TABLE_CATALOG
                     ,              t.TABLE_SCHEMA
                     ,              t.TABLE_NAME
                    UNION ALL
                    SELECT  x.TABLE_CATALOG
                     ,      x.TABLE_SCHEMA
                     ,      x.TABLE_NAME
                     ,      CASE    WHEN    x.COLUMN_NAME_MIN       = y.COLUMN_NAME
                                    THEN    1
                                    ELSE    2
                            END                                                     SORT
                     ,      CASE    WHEN    x.COLUMN_NAME_MIN       = y.COLUMN_NAME
                                    THEN    'SET     '
                                    ELSE    ' ,      '
                            END + y.SQL                                             SQL
                    FROM    (       SELECT  t.TABLE_CATALOG
                                     ,      t.TABLE_SCHEMA
                                     ,      t.TABLE_NAME
                                     ,      MIN(c.COLUMN_NAME)      COLUMN_NAME_MIN
                                    FROM    INFORMATION_SCHEMA.TABLES       t
                                     JOIN   INFORMATION_SCHEMA.COLUMNS      c
                                      ON    t.TABLE_CATALOG = c.TABLE_CATALOG
                                       AND  t.TABLE_SCHEMA  = c.TABLE_SCHEMA
                                       AND  t.TABLE_NAME    = c.TABLE_NAME
                                    WHERE   t.TABLE_TYPE    = 'BASE TABLE'
                                     AND    c.DATA_TYPE     IN ('char','nchar','varchar','nvarchar')
                                    GROUP BY        t.TABLE_CATALOG
                                     ,              t.TABLE_SCHEMA
                                     ,              t.TABLE_NAME
                            )       x
                     JOIN   (       SELECT  t.TABLE_CATALOG
                                     ,      t.TABLE_SCHEMA
                                     ,      t.TABLE_NAME
                                     ,      c.COLUMN_NAME
                                     ,      QUOTENAME(c.COLUMN_NAME) + ' = LTRIM(RTRIM(' + QUOTENAME(c.COLUMN_NAME) + '))'  SQL
                                    FROM    INFORMATION_SCHEMA.TABLES       t
                                     JOIN   INFORMATION_SCHEMA.COLUMNS      c
                                      ON    t.TABLE_CATALOG = c.TABLE_CATALOG
                                       AND  t.TABLE_SCHEMA  = c.TABLE_SCHEMA
                                       AND  t.TABLE_NAME    = c.TABLE_NAME
                                    WHERE   t.TABLE_TYPE    = 'BASE TABLE'
                                     AND    c.DATA_TYPE     IN ('char','nchar','varchar','nvarchar')
                            )       y
                      ON    x.TABLE_CATALOG = y.TABLE_CATALOG
                       AND  x.TABLE_SCHEMA  = y.TABLE_SCHEMA
                       AND  x.TABLE_NAME    = y.TABLE_NAME
            )       x
    ORDER BY        x.TABLE_CATALOG
     ,              x.TABLE_SCHEMA
     ,              x.TABLE_NAME
     ,              x.SORT
     ,              x.SQL
    

提交回复
热议问题