我使用指定的方法here来创建复合键。 SQL Server将其称为PrimaryKey,但它不是唯一的(!)。有没有办法在属性或流畅的API中指定唯一性?我发现了几个hacks here,但这应该可以提前做...
非唯一值组合是SQLBulkCopy操作的结果。这是可能的原因吗?
[编辑]我的假设是错误的 - 请继续阅读我的答案。
答案 0 :(得分:2)
我的错!键是唯一的,包括复合键。我的问题是在SqlBulCopy类的列映射中。我在做什么
Public Sub DoBulKCopy(dt As DataTable, cns As String)
Dim cn As New SqlConnection(cns)
cn.Open()
Dim copy As New SqlBulkCopy(cn)
For i As Integer = 0 To dt.Columns.Count - 1
copy.ColumnMappings.Add(i,i)
Next
虽然我应该这样做
Public Sub DoBulKCopy(dt As DataTable, cns As String)
Dim cn As New SqlConnection(cns)
cn.Open()
Dim copy As New SqlBulkCopy(cn)
For i As Integer = 0 To dt.Columns.Count - 1
copy.ColumnMappings.Add(dt.Columns(i).ColumnName, dt.Columns(i).ColumnName)
Next
而不是假设列顺序相同。
HTH
答案 1 :(得分:1)
复合键的唯一性是所有键的组合值。您可以在任何单个列中包含重复值,但所有键列作为一个整体不能作为序列重复。