我希望这不是题外话,但我有一个真正的问题,我可以使用一些建议。
我有一个应用程序在启动时升级自己的 Sql Server 数据库(从以前的版本)。通常这很好用,但新版本必须改变几个 nvarchar 列宽。
在表中有大量数据的实时数据库上,这需要很长时间。似乎有两个问题 - 一个是 Sql Server 似乎正在处理数据(可能重写它),即使实际上并没有改变,另一个是事务日志占用了大量空间。
有什么办法可以规避这个问题吗?这只是一个普通的 Alter Table... Alter Column 命令,将 nvarchar(x) 更改为 nvarchar(x+n),没什么花哨的,但它在该领域引起了“问题”和很多不满。如果有一种方法可以在不处理现有数据的情况下更改列宽,并且以某种方式抑制事务日志内容,那将很方便。
Oracle数据库似乎没有问题。
一个示例命令:
IF EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE table_name='ResourceBookings' AND column_name = ('ResourceBookerKey1') AND character_maximum_length <= 50)
ALTER TABLE [ResourceBookings] ALTER COLUMN [ResourceBookerKey1] NVARCHAR(80) NULL
如您所见,只有在需要增加列宽时才会更改表格
TIA