我有一个 Access 数据库,我正在使用 vb.net 中的 sqlbulkcopy 将其转换为 SQL 数据库。我们将货币值(最多 2 位小数)作为 Double 存储在 Access 中。当我将这些 Access 字段转换为类型为 [decimal] (19, 2) 的 SQL 字段时,存储在 Access 字段中的 81.6 之类的数字在转换时有时会在 SQL 字段中显示为 81.59。
如果我将 SQL 中的类型更改为 [decimal] (19,4),那么它将显示为 81.5999。Access 中的数字绝对是经过计算并存储到不超过两位小数的。有人可以向我解释为什么 SQL 会这样做吗?它不会一直发生……仅在某些记录中。
我已经查看了几乎所有我能找到的解释十进制类型的文章,并且我理解十进制是什么(我认为),但我不明白为什么数字有时会像这样转换。谢谢你的帮助。
编辑: 这是我在下面提到的代码,我用来循环遍历所有表和列,以将以“1Z”结尾的别名列重命名为其原始名称:
Dim dtTbls As DataTable = cnnSQL.GetSchema("Tables")
For Each drTbls As DataRow In dtTbls.Rows
Dim sTableName As String = drTbls(2)
Dim query As String = String.Concat("select * from [", sTableName, "] Where 0=1")
Dim myCmd As SqlDataAdapter = New SqlDataAdapter(query, cnnSQL)
Dim myData As New DataSet()
myCmd.Fill(myData)
For Each colu As DataColumn In myData.Tables(0).Columns
If colu.ColumnName.EndsWith("1Z") = True Then
Dim sNewColName As String = colu.ColumnName.Remove(colu.ColumnName.Length - 2, 2)
dbSQL.ExecuteNonQuery(String.Concat("EXEC sp_rename '", sTableName, ".", colu.ColumnName, "', '", sNewColName, "', 'COLUMN'"))
End If
Next colu
Next drTbls