gpt4 book ai didi

sql-server - 将数据库或表中的所有 NCHAR 列转换为 NVARCHAR 列

转载 作者:行者123 更新时间:2023-12-03 01:57:30 25 4
gpt4 key购买 nike

我有一个包含大量 NCHAR(n) 列的数据库。其中一些列是简单属性,但有些也是主键或外键。

表和列很多,测试数据量很大。

将每个 NCHAR(n) 列转换为相同长度的 NVARCHAR(n) 列并在执行此操作时修剪其内容的最佳方法是什么?

如果您能想到比更改设计器中的列、记住列名称并在脚本窗口中修剪它更好的方法,请将其作为答案发布。

最佳答案

我认为这样的事情可以解决问题(除非任何一个都是主键,然后你会得到一个错误 - 我建议你在你的情况下在设计器中手动执行主键,因为要改变它们,你必须删除它们约束等,这有点棘手)...

它获取所有 nchar 列的所有表名称、列名称和大小,并为每个执行 alter 语句来更改列类型,然后执行修剪数据的更新

可能有一种更高效的方法来执行此操作,但如果您只执行一次,也许这会没问题(哦,将 databaseName 位更改为数据库的名称)...

use databaseName

declare @tn nvarchar(128)
declare @cn nvarchar(128)
declare @ln int

declare @sql as nvarchar(1000)

declare c cursor for
select table_name,column_name,character_maximum_length
from information_schema.columns
where data_type ='nchar' and
TABLE_NAME not in (select TABLE_NAME from INFORMATION_SCHEMA.VIEWS)

open c
fetch next from c into @tn, @cn, @ln

while @@FETCH_STATUS = 0
begin

set @sql = 'alter table ' + @tn + ' alter column '
+ @cn + ' nvarchar(' + convert(nvarchar(50), @ln) + ')'
exec sp_executesql @sql

set @sql = 'update ' + @tn + ' set ' + @cn + ' = LTRIM(RTRIM(' + @cn + '))'
exec sp_executesql @sql

fetch next from c into @tn, @cn, @ln
end

close c
deallocate c

关于sql-server - 将数据库或表中的所有 NCHAR 列转换为 NVARCHAR 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11740935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com