我有一个关于SQL Server 2005的表,大小约为4GB.
(约1700万条记录)
我将其中一个字段从数据类型更改char(30)为char(60)(总共有25个字段,其中大部分都是char(10)如此,因此字符空间的数量加起来大约为300)
这导致表格尺寸翻倍(超过9gb)
然后我更改了char(60)to varchar(60)然后运行了一个函数来从数据中删除额外的空格(以便将字段中数据的平均长度减少到大约15)
这并没有减少表的大小.收缩数据库也没有帮助.
实际上没有重新创建表格结构并复制数据(这是1700万条记录!)是否有一种不那么激烈的方式让尺寸再次缩小?
ALTER TABLE Log ADD log_id bigint IDENTITY BEFORE cust_id_fk
Run Code Online (Sandbox Code Playgroud)
上面的代码在最后一个位置添加了一个新列.我希望它被添加到第一个位置.我也希望将其作为主键.
我有这样的情况,我需要更改列的顺序/为SQL Server 2008中的现有表添加新列.它不允许我没有删除和重新创建.但那是在生产系统中并且在该表中有数据.我可以备份数据,删除现有表并更改顺序/添加新列并重新创建它,将备份数据插入新表中.
有没有最好的方法来做到这一点,而不是删除和重新创建.我认为SQL Server 2005将允许此过程,而不会在更改为现有表结构时删除和重新创建.
谢谢
在向表添加新列并且不超过8060字节限制之前,是否有一种干净的方法来确定表的行大小?
例如,如果表行长度当前是8055字节,并且我想添加一个日期时间(8字节),那么它将会转到8063字节(不包括空映射).
但是,如果我添加一个整数(4个字节),这将给它8059个字节,这适合表大小(不包括空映射).
我目前能够获得表的大小,但是我发现很难创建SQL函数来获取数据类型的大小(int,datetime等)以及数据类型是否需要额外的字节用于null映射.
是否有一个我可以使用/开发的函数接受两个变量:tablename和datatype:fnIsEnoughStorage('table1',int)并从标量函数返回一个布尔值(是/否).
如果为true,我将在确定测试后继续执行ALTER TABLE命令.
当我想通过SQL Server Management Studio Express更改SQL Server Express 2008 R2数据库中现有表的列属性时 - 它不允许我.
我可以查看属性,但它们都是灰色的,我找不到任何东西来解开它.我刚刚从Access迁移,我想知道这是否是不可能的(表中已有数据 - 但我可以删除并创建新列)或者我是否遗漏了某些东西.