我已将postgresql数据库迁移到SQL Server 2016,其中我的所有文本列都具有TEXT
数据类型。我意识到TEXT
不应该在SQL Server中使用。
是否有一个简单的查询可以将SQL Server中的所有文本列数据类型从TEXT
更改为VARCHAR(MAX)
?
我发现此answer但受列名限制。我想立刻做到这一切。
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';
答案 0 :(得分: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'
如果您想自动生成并执行它:
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 */
rextester演示:http://rextester.com/AIYG12069