2015-10-13 68 views
1

我刚刚在SQL Server Express中遇到了10GB的数据库限制,并且希望删除不必要的列,并将其他列转换为不太重的数据类型。我有29列,只有50M行很害羞。在这29个中,有20个是漂浮物,其中只有10个对我很有用。我可以完全放弃浮动列中的10个,仍然拥有我需要的所有信息。在其余6列中,2是位,2是int(复合键需要),5是int,但可以是tinyint。在SQL Server Express 2014中转换列数据类型时的做法是什么?

如何确保在将这5列的数据类型更改为tinyint之前,事情会正确转换? SSMS警告说,从Design开始的时候会出现潜在的数据丢失问题,所以我想确保事情没有问题,然后再继续操作Alter Table语句。

是化繁为简:

SELECT [ExperimentID],[CycleCount] --My compound key 
FROM [dbo].[Simulations] 
WHERE (parameter1 < 0 OR parameter1 > 255) OR (parameter2 < 0 OR parameter2 > 255) OR (other search conditions) 

还是有更好的方式来验证这些东西呢?

另外,对不起,数据库没有正常规范化,我建议不要由同事规范化,以帮助以后的数据分析。

+0

为什么漂浮?你需要的数字真的很不精确吗?对于tinyint转换,您可以检查MAX(ColumnName)以查看它们是否适合tinyint。我可能会不同意你的同事关于正常化。表结构设计应该由开发人员未来的容易程度来决定。它应该始终是正确地存储数据,但这完全是另一个话题。 –

+0

有些事情要记住,这只是一种方式在路上踢球。如果您要继续添加行,您将再次达到10GB的限制。那么你打算怎么做? –

+0

这个特定的数据库存储了一些模拟结果。 56000/90000已经运行了,我认为通过删除大部分浮点数并在我可以的情况下将整数作为tinyint输入,数据库将远低于10GB。浮点数是需要的,因为我们需要至少6位数的精度超过小数点。 – ijustlovemath

回答

0

无论你想改变,你可以列的类型转换,选择它,以确保一切正常的话:

SELECT CAST(Column_Name as tinyint), * 
FROM [dbo].[Simulations] 

如果有这将引发异常INT值。

如果您尝试缩短字符串(如将varchar(1000)更改为varchar(100)),则会出现数据将被截断的消息。

+0

我还建议你检查文件大小,因为你的数据库的大部分可能是日志文件,我认为这对你来说是无用的。阅读更多 - https://msdn.microsoft.com/en-us/library/ms189272.aspx - 您需要将恢复模式更改为简单,然后将日志文件缩小为0. – GSazheniuk

+0

整个数据库的日志为20MB ,所以我不认为这是问题。我喜欢将它用于“以防万一” – ijustlovemath

+0

然后是的,20MB没有意义,所以最好保留它,尽管批量更新所有数据以更改列的类型后,它可能会立即变大。 – GSazheniuk

相关问题