将 SQL 服务器中的所有表数据类型从 text 更改为 varchar
Alter all tables data types from text to varchar in SQL Server
我已将 postgresql 数据库迁移到 SQL Server 2016,其中我所有的文本列都具有 TEXT
数据类型。我意识到 TEXT
不应该在 SQL 服务器中使用。
是否有一个简单的查询可以将 SQL 服务器中的所有文本列数据类型从 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';
如果你只想生成命令,你可以使用这样的东西:
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
我已将 postgresql 数据库迁移到 SQL Server 2016,其中我所有的文本列都具有 TEXT
数据类型。我意识到 TEXT
不应该在 SQL 服务器中使用。
是否有一个简单的查询可以将 SQL 服务器中的所有文本列数据类型从 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';
如果你只想生成命令,你可以使用这样的东西:
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