如何将数据库中所有基表的所有列的数据类型更改为Unicode数据类型



由于存储来自语言特定的变音符(西班牙语,法语,德语)的值,我试图将列的数据类型更改为Unicode数据类型。

  • Varchar到Varchar
  • char到nchar

所以所有的列数据类型为其各自的Unicode数据类型。

指定数据库中的所有表。

可以在单个语句中完成吗?因为处理alter语句非常耗时。

ALTER TABLE dbo.Employee 
ALTER COLUMN FirstName NVARCHAR(255) NOT NULL

许多谢谢。

首先,我们创建一个临时表,并定义更改所需的变量。

然后我们通过获取需要更改的列来填充表。我输入了下面的获取命令,一切都清楚了。

然后,对于表中的每一行,我们在数据库中进行所需的更改。

同样,表中的列可能具有NULL的值,因此必须在更改列之前将NULL的值替换为值。我将NULL的值替换为0的值。

下面的代码完全正确地工作。

我只在schema name中输入dbo来查找列。查看数据库模式名称

--Container to Insert Id which are to be iterated
Declare @temp1 Table
(
tablename varchar(100),
columnname varchar(100),
columnlength varchar(100),
columntype varchar(100)
)
--Container to Insert records in the inner select for final output
Insert into @temp1 
SELECT t.TABLE_NAME,c.COLUMN_NAME,c.CHARACTER_MAXIMUM_LENGTH,c.DATA_TYPE FROM information_schema.tables t
join INFORMATION_SCHEMA.COLUMNS c on t.TABLE_NAME = c.TABLE_NAME
WHERE t.table_schema='dbo'
and (DATA_TYPE = 'varchar' OR DATA_TYPE = 'char')
-- Keep track of @temp1 record processing
Declare @tablename varchar(100)
Declare @columnname varchar(100)
Declare @columnlength varchar(100)
Declare @columntype varchar(100)
Declare @SQL VarChar(1000)
Declare @vary varchar(100)
Declare @final varchar(1000)
While((Select Count(*) From @temp1)>0)
Begin

Set @tablename=(Select Top 1 tablename From @temp1)
Set @columnname=(Select Top 1 columnname From @temp1)
Set @columnlength=(Select Top 1 columnlength From @temp1)
Set @columntype=(Select Top 1 columntype From @temp1)

if(@columntype = 'varchar')
Set @columntype='nvarchar'
else
Set @columntype='nchar'
--set null value with 0 value
SELECT @SQL = 'UPDATE ' + @tablename + ' SET ' + @columnname + ' = 0 WHERE ' + @columnname  + ' IS NULL'
Exec ( @SQL)

SELECT @SQL = 'ALTER TABLE '
SELECT @SQL = @SQL + @tablename
select @vary = ' ALTER COLUMN ' + @columnname + ' ' + @columntype + '(' + @columnlength + ') NOT NULL'
select @final = @sql + @vary
--select @final
Exec ( @final)
Delete @temp1 Where tablename=@tablename and columnname = @columnname
End

相关内容

  • 没有找到相关文章

最新更新