Insert Into table1 Field1,Field2 ,……
Select ……From table2在进行以上操作时如何让table1表的Field1字段值自动增加(此字段类型为int,但不为identity,并且也不允许将期更改为identity,并且table1表中已有记录)

解决方案 »

  1.   

    逐条记录插入,每次插入前先计算出Field1的字段值
      

  2.   

    我也想不出太好办法:
    1、如上所说,每次插入一条,插入前用Select max(field1)+1 from table1 计算下一条记录的field1值。
    2、如果是SQL Server2000的话,编写个触发器吧。
      

  3.   

    其实可以用冒泡排序法找出最大的FIELD数....再判断输入的FIELD是否大于最大的,,如果是就FIELD++........
      

  4.   

    Private Sub Command1_Click()
    '将现有的 Field1 按降序排序,取出最大的,在自加 1 即可!Dim cSql As String
    Dim nId As Integer
    Dim adoCnn As New ADODB.Connection
    Dim adoRst As ADODB.Recordset'... '用 adoCnn 连结数据库cSql = "SELECT * FORM table1 ORDER BY Field1 DESC"
    Set adoRst = adoCnn.Execute(cSql, , adCmdText)
    With adoRst
         If .RecordCount = 0 Then
             nId = 1
         Else
            .MoveFirst
             nId = !Field1 + 1
         End If
        .AddNew
        !ID = nId
        .Update
    End With'或者以下语句也可以:
    cSql = "SELECT MAX(Field1) AS nID FROM table1"
    Set adoRst = adoCnn.Execute(cSql, , adCmdText)
    With adoRst
         If .RecordCount = 0 Then
             nId = 1
         Else
             nId = !nId + 1
         End If
        .AddNew
        !ID = nId
        .Update
    End With
    End Sub
      

  5.   

    在插入之前,首先执行下SQL语句
    Select max(Field1) from table1
    然后根据结果对其加一处理。
      

  6.   

    如果是oracle的话,可以定义一个sequence,插入的时候读取sequence的值就可以了。
    再多个客户端同时执行插入的情况下,上面的取Field1的最大值得方法不可行。
      

  7.   

    sql的话,把字段设为自动增加;
    oracle的话,先建立一个序列,再写一个触发器,可以达到象sql自动增加列的效果,详细你可以看看这方面的书。