我目前正在尝试将SQL Server 2012中数据库的所有表中的所有列从char转换为nvarchar。
我试图运行的查询是
select cast((select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where DATA_TYPE = 'char') as nvarchar(MAX))
不知道是否应该通过INFORMATION_SCHEMA.COLUMNS更改数据类型,但是我发现这是获取数据类型的最佳方法。
我目前收到的错误是:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
有没有更好的方法可以解决此问题或解决此错误的方法,因为似乎我不希望同时将数据类型更改为多行。
从INFORMATION_SCHEMA.COLUMNS中选择是确定需要转换哪些列的好方法,
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE = 'CHAR';
但是它不能用于直接更改列的数据类型。ALTER TABLE用于修改列数据类型:
ALTER TABLE [dbo].[TableName] ALTER COLUMN [ColumnName] NVARCHAR(50);
当您使用它时,NVARCHAR(MAX)除非绝对必要,否则请避免使用。确保为属性指定大小的数据类型。如果您的CHAR列已经正确尺寸,使用下面的脚本 生成 的ALTER TABLE语句:
NVARCHAR(MAX)
CHAR
ALTER TABLE
SELECT 'ALTER TABLE ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) + ' ALTER COLUMN ' + QUOTENAME(COLUMN_NAME) + ' NVARCHAR(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(4)) + ');' FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE = 'char';
请记住,这只会生成ALTER TABLE语句,您需要复制结果并在新选项卡中执行以更改数据类型。