sql-server - 将所有 VARCHAR 列更改为 NVARCHAR

标签 sql-server

我的数据库中有大约 200 列 VARCHAR无法存储卢比符号的类型。现在我必须更改 VARCHAR 中所有列的数据类型至 NVARCHAR .

谁能告诉我实现这一目标的捷径?为什么VARCHAR支持英镑符号而不是卢比符号?我问是因为我必须将英镑符号更改为卢比符号。

最佳答案

您可以使用 ff 查询查看所有列、它们的数据类型和它们所属的表:

SELECT 
    t.name AS table_name,
    c.name AS column_name,
    tp.name AS data_type,
    c.max_length,
    c.is_nullable
FROM sys.tables AS t
INNER JOIN sys.columns c 
    ON t.OBJECT_ID = c.OBJECT_ID
INNER JOIN sys.types tp
    ON tp.user_type_id = c.user_type_id
WHERE tp.name = 'varchar'

从上面的查询中,您要生成一个动态 sql,它将更改您所有的 VARCHAR列到 NVARCHAR .
DECLARE @sql AS VARCHAR(MAX) = ''

SELECT @sql = @sql 
    + 'ALTER TABLE ' + table_name 
    + ' ALTER COLUMN ' + column_name + ' NVARCHAR(' 
        + CASE WHEN max_length <> - 1 THEN CAST(max_length AS VARCHAR(10))  ELSE 'MAX' END + ')'
        + CASE WHEN is_nullable = 1 THEN ' NULL' ELSE '' END
        + ';' + CHAR(10)
FROM (
    SELECT 
        t.name AS table_name,
        c.name AS column_name,
        tp.name AS data_type,
        c.max_length,
        c.is_nullable
    FROM sys.tables AS t
    INNER JOIN sys.columns c 
        ON t.OBJECT_ID = c.OBJECT_ID
    INNER JOIN sys.types tp
        ON tp.user_type_id = c.user_type_id
    WHERE tp.name = 'varchar'
)t

PRINT @sql
EXEC(@sql)

关于sql-server - 将所有 VARCHAR 列更改为 NVARCHAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30772477/

相关文章:

sql - 需要使用聚合函数提高 SQL 查询的性能

asp.net - 存储过程中的范围标识

php - 查询失败(使用 mssql_query() 和 php)

sql - 如何在我的 TSQL 中替换 union all

C#。 NPOCO。错误 : "Incorrect syntax near ' &'. " when trying to join

sql-server - 如何更改 SQL Server 2008 中现有表的列顺序

sql-server - SQLServer 无法创建表, "Already exists",但它不是 AFAICT

sql-server - SQL Server 复制过滤

sql-server - SQL Server 全文搜索转义字符?

sql-server - 在 SQL Server 中将大表数据从一个数据库复制到另一个数据库