本帖最后由 yhxhappy 于 2018-4-15 12:13 编辑
表有两列,结构是这样:ID int identity(1,1) PRIMARY KEY, Model varchar(30)
第1列ID每插入一行自动递增
现在可以做到先插入行,再查询表的最新ID,但这样做法缺点是,在查询ID之前如果其他用户又插入一行,得到的ID值就是错误的。
所以想在插入行的同时获取该行的ID。
在 SQL Server Management Studio 中按以下操作可以实现:
INSERT "表" ("MODEL") VALUES (115) SELECT @@IDENTITY
以下代码已更新,可以解决我的问题。Func _MsSQL_InsertTable($Obj, $Table, $Field, $Value) ;插入行,字段与值对应,可部分或完全填写
If Not IsObj($Obj) Then
SetError(1)
Return 0
ElseIf $Table = "" Or $Field = "" Or $Value = "" Then
SetError(4)
Return 0
EndIf
$FieldArray = StringSplit($Field, ",")
$ValueArray = StringSplit($Value, ",")
If $FieldArray[0] <> $ValueArray[0] Then
SetError(2)
Return 0
EndIf
Local $FieldText = "", $ValueText
For $i = 1 To $ValueArray[0]
$ValueText &= "'" & $ValueArray[$i] & "',"
Next
$ValueText = StringTrimRight($ValueText, 1)
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $Obj
ConsoleWrite("SELECT MAX(ID)+1 FROM "& $Table &" INSERT " & $Table & " (" & $Field & ") VALUES (" & $ValueText & ")" & @CRLF)
$RS.Open("SELECT MAX(ID)+1 FROM "& $Table &" INSERT " & $Table & " (" & $Field & ") VALUES (" & $ValueText & ")")
If @error Then
SetError(3)
Return 0
EndIf
$ID = $RS.Fields(0).value
$RS.close
Return $ID
EndFunc
|