我的数据库中有大约 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/