在SQL Server中将所有表数据类型从text更改为varchar

FDa*_*mas 1 sql sql-server sql-server-2016

我已将postgresql数据库迁移到SQL Server 2016,其中我的所有文本列都具有TEXT数据类型.我意识到TEXT不应该在SQL Server中使用它.

是否有一个简单的查询来将所有文本列数据类型从SQL Server 更改TEXTVARCHAR(MAX)

我找到了这个答案但受列名限制.我想立刻做到这一切.

 select 
     'alter table '||table_schema||'.'||table_name||' alter column'||column_name||' type text;'
 from 
     information_schema.columns
 where 
     table_schema = 'public'
     and column_name = 'description'
     and data_type = 'text';
Run Code Online (Sandbox Code Playgroud)

Sql*_*Zim 7

如果您只想生成命令,可以使用以下内容:

select 
  'use ' + quotename(c.table_catalog) + '; alter table ' 
  + quotename(c.table_schema) + '.' + quotename(c.table_name) 
  + ' alter column ' + quotename(c.column_name) + ' varchar(max);'
from information_schema.columns as c
  inner join information_schema.tables t 
    on c.table_name = t.table_name 
   and c.table_schema = t.table_schema
where c.data_type = 'text' 
  and t.table_type = 'base table'
Run Code Online (Sandbox Code Playgroud)

如果要自动生成并执行它:

declare @sql nvarchar(max);

set @sql = stuff((
    select 
      char(10)+'use ' + quotename(c.table_catalog) + '; alter table ' 
      + quotename(c.table_schema) + '.' + quotename(c.table_name) 
      + ' alter column ' + quotename(c.column_name) + ' varchar(max);'
    from information_schema.columns as c
      inner join information_schema.tables t 
        on c.table_name = t.table_name 
      and c.table_schema = t.table_schema
    where c.data_type = 'text' 
      and t.table_type = 'base table'
    for xml path (''), type).value('.','nvarchar(max)')
  ,1,1,'')

select CodeGenerated = @sql; /* preview code generated */
--exec sp_executesql @sql; /* uncomment to execute after previewing */
Run Code Online (Sandbox Code Playgroud)

rextester演示:http://rextester.com/AIYG12069