sql - 将数据类型 Char 转换为 Nvarchar

标签 sql char sql-server-2012 nvarchar

我目前正在尝试将数据库所有表中的所有列从 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 语句:

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 语句,您需要复制结果并在新选项卡中执行以更改数据类型。

关于sql - 将数据类型 Char 转换为 Nvarchar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20497388/

相关文章:

c - C 中的线程安全 char 字符串

c++ - C\C++ : Initialize ASCII special char?

mysql - 通过 if 语句定义的列

sql - 根据其他行的值删除单个数据库表中的行

c++ - 在 C++ 中将字符串连接成 char 数组(通过使用 less strcat)

visual-studio-2010 - 报表查看器 11 (2012) Visual Studio 2010

c# - 尝试通过应用而非 Management Studio 连接时登录失败

sql - Material list 的递归查询

sql - SQL Server 2008 中超前滞后函数的替代

SQL Server 查询选择情况