小编MrB*_*MrB的帖子

如何在SQL Server中的大表中添加NOT NULL列?

要将NOT NULL列添加到具有许多记录的表中,需要应用DEFAULT约束.如果表非常大,则此约束会导致整个ALTER TABLE命令运行很长时间.这是因为:

假设:

  1. DEFAULT约束修改现有记录.这意味着db需要增加每条记录的大小,这会导致它将完整数据页上的记录转移到其他数据页,这需要时间.
  2. DEFAULT更新作为原子事务执行.这意味着需要增加事务日志,以便在必要时可以执行回滚.
  3. 事务日志跟踪整个记录.因此,即使只修改了一个字段,日志所需的空间也将基于整个记录的大小乘以现有记录的数量.这意味着向具有小记录的表添加列将比向具有大记录的表添加列更快,即使两个表的总记录数相同也是如此.

可能的解决方案:

  1. 把它吸干然后等待这个过程完成.只需确保将超时时间设置得很长.这样做的问题是,根据记录数量,可能需要数小时或数天才能完成.
  2. 添加列但允许NULL.然后,运行UPDATE查询以设置现有行的DEFAULT值.不要做UPDATE*.一次更新批量记录,否则您将遇到与解决方案#1相同的问题.这种方法的问题在于,当您知道这是一个不必要的选项时,最终会得到一个允许NULL的列.我相信有一些最佳实践文档说明你不应该有允许NULL的列,除非有必要.
  3. 使用相同的架构创建新表.将列添加到该架构.从原始表传输数据.删除原始表并重命名新表.我不确定这比#1更好.

问题:

  1. 我的假设是否正确?
  2. 这是我唯一的解决方案吗?如果是这样,哪一个是最好的?我不,我还能做什么?

sql-server

50
推荐指数
1
解决办法
5万
查看次数

EXE和MSI安装程序之间有什么区别?

我使用Installaware创建了一个安装包,并生成了一个EXE和一个MSI.EXE为3.1MB,MSI仅为265K.为什么尺寸会有这么大的差异?

windows-installer installaware

12
推荐指数
3
解决办法
6731
查看次数

如果未指定-sv,makecert在哪里存储私钥?

假设我运行此命令:

makecert testcert.cer
Run Code Online (Sandbox Code Playgroud)

是否创建了私钥?如果是这样,即使我没有告诉makecert在任何证书存储中安装此证书,它在哪里自动存储在系统中?

certificate

10
推荐指数
1
解决办法
7505
查看次数

如何将DataTable/DataSet转换为ObjectDataSource

我有一个与ObjectDataSource绑定的GridView.我有一个返回DataTable的方法.如何将DataTable提供给ObjectDataSource,以便在代码中更新GridView?

例:

protected void Page_Load(object sender, EventArgs e) 
{
    MyClass obj = new MyClass(textbox.Text);
    DataTable dt = obj.GetData();

    ObjectDataSource1.DataSource = dt; 
}
Run Code Online (Sandbox Code Playgroud)

是的,我知道ODS没有DataSource属性.这就是为什么我被卡住了.

如果您正在考虑,为什么不直接为GridView分配DataTable; 答案是:我们喜欢ODS + GridView组合提供的自动排序功能.

Google返回的所有搜索都是如何从ODS获取DT.我找不到关于如何将DT引入ODS的单一参考.这似乎是一个非常普遍的需求,因为来自ASP.NET 1.1的人将拥有大量生成DT的代码,如果他们想要更新UI,他们将希望将DT引入ODS.

.net data-binding

5
推荐指数
1
解决办法
2万
查看次数

如何在NTFS中减小文件夹索引文件的大​​小?

我在NTFS中有一个包含数万个文件的文件夹.我删除了该文件夹中的所有文件,保存1.我运行contig.exe对该文件夹进行碎片整理,所以现在它只在1个片段中.但是,该文件夹的大小仍然是8MB.这意味着指数存在很大差距.这是为什么?如果我删除那个文件,索引的大小会自动变为零.我的猜测是因为它崩溃了进入MFT.有没有办法让NTFS通过根据文件内容对其进行碎片整理来真正对索引文件进行碎片整理?您知道的任何API?Contig.exe只对物理文件进行碎片整理.

ntfs

4
推荐指数
1
解决办法
3169
查看次数